嵌入式linux网络编程之I/O多路复用select
2017-06-27 12:17
471 查看
多进程和多线程的目的是在于最大限度地利用CPU资源,当某个进程不需要占用太多CPU资源,而是需要I/O资源时,可以采用I/O多路复用,基本思路是让内核把进程挂起,直到有I/O事件发生时,再把控制返回给程序。这种事件驱动模型的高效之处在于,省去了进程和线程上下文切换的开销。整个程序运行在单一的进程上下文中,所有的逻辑流共享整个进程的地址空间。缺点是,编码复杂,而且随着每个逻辑流并发粒度的减小,编码复杂度会继续上升。
I/O多路复用典型应用场合(摘自UNP6.1)
select的模型就是这样一个实现,把每个客户的请求放入事件队列中,主线程通过非阻塞的I/O来处理他们。
select详细的用法和fd_set结构见:UNP的CH6
几个Tips
1、select在等待期间会被进程捕获的信号中断,从严谨的角度出发,应处理好EINTR错误
2、内核实际支持的时间分辨率比timeval结构的微秒级粗糙
3、select每次返回的是已就绪的总的描述位数,并把未就绪的位清0(三个fd_set参数都是值-结果参数)因此每次重新调用select时需重新对所有集合置1
I/O多路复用典型应用场合(摘自UNP6.1)
select的模型就是这样一个实现,把每个客户的请求放入事件队列中,主线程通过非阻塞的I/O来处理他们。
select详细的用法和fd_set结构见:UNP的CH6
几个Tips
1、select在等待期间会被进程捕获的信号中断,从严谨的角度出发,应处理好EINTR错误
2、内核实际支持的时间分辨率比timeval结构的微秒级粗糙
3、select每次返回的是已就绪的总的描述位数,并把未就绪的位清0(三个fd_set参数都是值-结果参数)因此每次重新调用select时需重新对所有集合置1
相关文章推荐
- Linux网络编程---I/O多路复用 之 select
- Linux网络编程之TCP编程,select多路复用和超时检测,网络属性设置setsockopt之快速重启(非常经典)
- linux网络编程——多路复用select模型简例
- Linux网络编程----fcntl和select
- Linux 下网络编程中的select
- linux下非阻塞网络编程-select
- 嵌入式Linux网络编程
- Linux 网络编程中的select
- Linux 下网络编程中的select
- 嵌入式成长轨迹26 【Linux应用编程强化】【中嵌第二阶段】【Linux网络应用】
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux socket网络编程之聊天室(三):select异步通讯实现
- 嵌入式Linux网络编程
- linux网络编程并发进程,select和epoll(二)
- linux网络高级编程之 fcntl和select使用
- 【嵌入式Linux学习七步曲之第七篇 Linux的高级应用编程】网络编程中并发服务器的设计模式
- 面试中的soket编程相关(一)(如何判断连接状态断开,Linux:C/Socket多路复用select(),阻塞
- Linux 下网络编程中的select
- linux 网络编程---->多路复用:select实例!
- Linux网络编程select模型的实现