Unix/Linux 编程: 网络编程之 I/O 模型
发布时间
阅读量:
阅读量
一、阻塞IO(blocking)

主线程在等待用户连接请求时处于阻塞状态(accept阻塞)。当连接请求到达后,会进一步调用(recv)系统调用以接收数据,此时又进入阻塞等待状态。待内核完成数据的接收,并将数据从内核空间复制至用户空间后,系统调用才会返回,从而表示数据读取过程已经完成。在这一过程中,主线程在等待IO操作时会被挂起,无法执行其他任务,导致服务器整体性能出现较大浪费。
二、多线程(blocking+multithread)
鉴于accept系统调用会为每个客户端连接生成一个文件描述符,因此可以采用多线程机制进行处理。主线程仅承担接受连接请求的任务。
当接收到具体请求后,将对应的客户端文件描述符传递至工作线程,该线程会调用相应的函数来执行后续操作。
在并发量较低的情况下,这种处理方式能够实现较为理想的效果。然而,当面对极高并发场景时,频繁的线程切换与调度将导致大量CPU资源被消耗(此时可能存在大量线程处于IO等待状态),同时创建线程本身的开销也较为显著。
三、非阻塞IO(no-blocking)
在数据尚未就绪的情况下,非阻塞IO允许rec
全部评论 (0)
还没有任何评论哟~
