进程1.什么是进程?程序:程序是指令和数据的集合进程:进程就是程序的一次执行过程,是系统进行资源分配和调度的基本单位
2.如何操作进程?设立了PCB (进程控制块),其内容如下。标示符:描述本进程的唯一标示符,用来区别其他进程。状态:任务状态,退出代码,退出信号等。优先级:相对于其他进程的优先级。程序计数器:程序中即将被执行的下一条指令的地址。内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针上下文数据:进程执行时处理器的寄存器中的数据。I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息CPU对进程的调度使用CPU通过PCB中的内存指针来找到程序在内存中的地址,通过上下文数据来记录运行中程序的各种信息,通过程序计数器来找到这个程序即将执行的下一条指令的地址。
3.进程的状态三种基本状态:就绪、运行、阻塞五种状态:新建状态,就绪状态,运行状态,阻塞状态,退出状态。
4.子进程当我们在一个已经创建的进程内通过fork创建一个新的进程时,这个 ...
僵尸进程和孤儿进程1.什么是进程?程序:程序是指令和数据的集合进程:进程就是程序的一次执行过程,是系统进行资源分配和调度的独立单位
2.为什么需要进程?引入多道程序技术后为了方便管理,完成对各个程序的并发执行,引入了进程
3.如何操作进程?操作系统为了能够使每个程序能够独立运行,在操作系统中为其配置了一个数据结构,也就是我们通常所说的PCB(Process Control Block),PCB 是进程运行相关的信息集合。
孤儿进程:父进程运行结束,但子进程还在运行(未运行结束)的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变成孤儿进程的父进程,并由init进程对它们完成状态收集工作。(linux下,init是内核启动的第一个用户级进程,init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。)
僵尸进程:一个进程使用fork创建子进程,如果子进程退出执行后,父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。如果进程不调用w ...
操作系统
未读多路IO复用https://blog.csdn.net/qq_46312987/article/details/124213418
零拷贝优化传统的网络编程中,将磁盘文件写入网卡需要进行四次拷贝和四次上下文切换。磁盘文件–DMA拷贝->(内核态)缓存区–CPU拷贝->(用户态)用户缓存区–CPU拷贝->(内核态)socket缓冲区–DMA拷贝->网卡。
DMA拷贝:DMA的原理是CPU将需要迁移的数据的位置告诉给DMA,包括源地址,目的地址以及需要迁移的长度,然后启动DMA设备去完成相应的操作,最后通过中断反馈给CPU,结束。
Mmap优化:mmap通过内存映射,将内存缓冲区中的数据映射到用户缓冲区,由此让用户空间共享内核空间的数据。
常用的IO模型阻塞IO:假设建立一个socket连接,如果这个连接的客户端一直不发数据,那么服务端线程将会一直阻塞在read函数上不返回。
非阻塞IO:将read函数改造成:如果没有数据到达网卡时,立即返回一个错误值,而不是阻塞地等待。这样就需要用户线程循环调用read,直到返回值不为-1,再开始处理业务。注意:非阻塞的read, ...
计算机网络
未读time_waittime_wait状态如何产生?由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。
time_wait状态产生的原因1)为实现TCP全双工连接的可靠释放假设发起主动关闭的一方(client)最后发送的ACK在网络中丢失,由于TCP协议的重传机制,执行被动关闭的一方(server)将会重发其FIN,在该FIN到达client之前,client必须维护这条连接状态,也就说这条TCP连接所对应的资源(client方的local_ip,local_port)不能被立即释放或重新分配,直到另一方重发的FIN达到之后,client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。如果主动关闭一方不维护这样一个TIME_WAIT状态,那 ...
计算机网络
未读TCP握手挥手数据传输三次握手过程第一次握手客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态(请求连接),等待服务器确认
第二次握手服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态(接收到SYN的状态,连接套接字状态);
第三次握手客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕并完成接收后,客户端和服务器进入ESTABLISHED状态(已经建立了连接状态),完成三次握手。
SYN:同步序列编号(Synchronize Sequence Numbers),是TCP/IP建立连接时使用的握手信号。ACK:确认字符(Acknowledge character),在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。
第三次握手就是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。
传输数据过程a.超时重传:超时重传机制用来保证TC ...
go的多进程虽然说可以直接用go的协程直接起子进程,但是为了保证当起子进程时父类的结构尽可能简单,变采用主进程起子进程的形式
异步起进程主进程起进程,起协程监听子进程的执行情况,可以使后台的子进程跑满制定数量
123456789101112131415161718192021222324252627282930313233343536373839404142package mainimport ( "log" "os" "strconv")var processChan = make(chan int, 10)func processListen(process *os.Process) { p, _ := process.Wait() exitCode := p.ExitCode() log.Println("process finish ExitCode: ", exitCode) <-processChan}func main() { poolsize := 8 f ...
计算机网络
未读TCP与UDP的区别TCPTCP的优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点:慢,效率低,占用系统资源高,易被攻击TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
什么时候应该使用TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输
UDPUDP的优 ...
计算机网络
未读SSL握手过程本质SSL握手过程的本质是在协商对称加密的秘钥。HTTPS协议的安全机制是靠SSL来实现的(SSL位于应用层和传输层之间)
为了保证数据的安全性,在数据发送前需要对数据进行加密。传统的对称加密,协商秘钥过程如果被窃听导致秘钥泄露,加密的数据也就变得“公开透明”了,而使用非对称加密的方式效率较低。因此,在SSL中采用“对称加密个非对称加密结合”的方法保证数据的安全性,即非对称加密进行对称加密秘钥的协商,而这个协商过程就可以认为是SSL握手。
过程1.客户端给服务器端发送协议版本、客户端支持的加密算法、一个随机数1。2.服务器端选择加密算法,并向客户端发送一个服务器数字证书和一个随机数2。3.客户端使用数字证书中的公钥,将随机数3加密发送给服务器。4.服务器使用私钥对随机数字3解密。5.服务器端和客户端通过事先协商好的加密算法,对这三个随机数进行加密生成“对话秘钥”(session key)即对称加密的秘钥,用于接下来整个对话过程的加密。
http协议无状态协议以及解决方案http本身是一种无状态协议
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。
http与https的区别HTTP的URL以http:// 开头,而HTTPS 的URL 以https://开头HTTP是不安全的,而HTTPS是安全的HTTP标准端口是80 ,而HTTPS的标准端口是443在OSI网络模型中,HTTP工作于应用层,而HTTPS的安全传输机制工作在传输层HTTP无法加密,而HTTPS对传输的数据进行加密HTTP无需证书,而HTTPS需要CA机构wosign的颁发的SSL证书
计算机语言
未读C++中的constexprhttps://blog.csdn.net/m0_52902391/article/details/120308866https://zhxilin.github.io/post/tech_stack/1_programming_language/modern_cpp/cpp17/constexpr/#c14-constexpr
常量表达式值不会改变且在编译期就能得到计算结果的表达式。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
constexpr 与 const在定义常量时,const 和 constexpr 是等价的,都可以在程序的编译阶段计算出结果 都为常量表达式但是const可以修饰函数的传入参数为只读(并非常量),而constexpr无法修饰
12345678910111213141516 // errorvoid func1(constexpr int p) {}// okvoid func2(const int p) {}void func3(const int p) ...
kafka日常操作kafka查看数据查看所有topic1./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list
查看所有group1./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list
查看指定topic的订阅信息1./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic XXXXX
消费指定group的订阅信息1./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group XXXXX --describe
查看从当前当前开始到结束,kafka中指定topic接收到的信息1./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic XXXXX
查看所有kafka中接收到的信息1./kafka-console-consume ...










