常见的IO模型阻塞IO顾名思义,阻塞IO就是两个阶段都必须阻塞等待:阶段一:用户进程尝试读取数据(比如网卡数据)此时数据尚未到达,内核需要等待数据此时用户进程也处于阻塞状态阶段二:数据到达并拷贝到内核缓冲区,代表已就绪将内核数据拷贝到用户缓冲区拷贝过程中,用户进程依然阻塞等待拷贝完成,用户进程解除阻塞,处理数据可以看到,阻塞IO模型中,用户进程在两个阶段都是阻塞状态。非阻塞IO顾名思义,非阻塞IO的recvfrom操作会立即返回结果而不是阻塞用户进程。阶段一:用户进程尝试读取数据(比如网卡数据)此时数据尚未到达,内核需要等待数据返回异常给用户进程用户进程拿到error后,再次尝试读取循环往复,直到数据就绪阶段二:将内核数据拷贝到用户缓冲区拷贝过程中,用户进程依然阻塞等待拷贝完成,用户进程解除阻塞,处理数据可以看到,非阻塞IO模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。虽然是非阻塞,但性能并没有得到提高。而且忙等机制会导致CPU空转,CPU使用率暴增。IO多路复用IO多路复用:是利用单个线程来同时监听多个Socket ,并在某个Socket可读、可写时得到通知,从而避免无
Rance
人之幼稚, 不学则愚