I/O多路复用的应用场合疑问?
RT
现在的I/O多路复用是应用在服务器与客户端之间吧,两者通过socket通信。
可是为什么我看有些资料是以用户线程和内核来举例子,难道用户线程和内核之间也用socket进行通信?要用到I/O多路复用?
还有就是安卓手机应该也用不到I/O多路复用吧,它又不会当服务器用。
我的理解是eploll() select()这些函数只会出现在服务器端程序上,就连客户端上都不会有,不知道我的理解对不对?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的想法是IO多路复用的一个方面,也是网络编程中非常重要的一方面。但不是全部,而是将其作用减小了。
1:IO多路复用说白了就是:允许我们一次同时检测多个
文件描述符
,看其中的一个是否执行IO
操作。2:既然它检测的是
文件描述符
,就是fd
,而Linux下一切皆是文件
,就是说除了socket
,还有普通文件
,终端
,管道
等这些都可以被检测。因为它们被用户操作都是通过fd
。3:用户线程和内核之间当然不是通过socket通信,但是内核可以采用IO多路复用的方式同时监控一个线程打开的
文件描述符
,然后同时做IO处理,操作系统启动后那么多线程,每个默认可以打开1024
个文件,为了提高效率,用IO多路复用当然好。所以,IO多路复用是一种高效策略,应用于网络编程只是因为我们可以默认把
socket
当作普通文件
处理罢了。如果不多路IO复用,相当于每个socket都起一个线程或者fork一个进程来处理,显然不划算,对于多客户端的服务器简直就无法工作了。
多路IO复用的对象就是线程和进程等计算资源,多路复用需要内核提供支持,不同实现方式比如select, poll, epoll在不同情况下在内核的开销不一样,所以会涉及到内核。
客户端如果有多个连接要处理,或者想有可控的阻塞时间的话,用select也很常见。
源自http://www.jianshu.com/p/1020...
文中着重点在于异步通信