首页 > I/O多路复用的应用场合疑问?

I/O多路复用的应用场合疑问?

RT

现在的I/O多路复用是应用在服务器与客户端之间吧,两者通过socket通信。

可是为什么我看有些资料是以用户线程和内核来举例子,难道用户线程和内核之间也用socket进行通信?要用到I/O多路复用?

还有就是安卓手机应该也用不到I/O多路复用吧,它又不会当服务器用。

我的理解是eploll() select()这些函数只会出现在服务器端程序上,就连客户端上都不会有,不知道我的理解对不对?


如果不多路IO复用,相当于每个socket都起一个线程或者fork一个进程来处理,显然不划算,对于多客户端的服务器简直就无法工作了。
多路IO复用的对象就是线程和进程等计算资源,多路复用需要内核提供支持,不同实现方式比如select, poll, epoll在不同情况下在内核的开销不一样,所以会涉及到内核。

客户端如果有多个连接要处理,或者想有可控的阻塞时间的话,用select也很常见。


源自http://www.jianshu.com/p/1020...
文中着重点在于异步通信


你的想法是IO多路复用的一个方面,也是网络编程中非常重要的一方面。但不是全部,而是将其作用减小了。

1:IO多路复用说白了就是:允许我们一次同时检测多个文件描述符,看其中的一个是否执行IO操作。
2:既然它检测的是文件描述符,就是fd,而Linux下一切皆是文件,就是说除了socket,还有普通文件,终端,管道等这些都可以被检测。因为它们被用户操作都是通过fd
3:用户线程和内核之间当然不是通过socket通信,但是内核可以采用IO多路复用的方式同时监控一个线程打开的文件描述符,然后同时做IO处理,操作系统启动后那么多线程,每个默认可以打开1024个文件,为了提高效率,用IO多路复用当然好。

所以,IO多路复用是一种高效策略,应用于网络编程只是因为我们可以默认把socket当作普通文件处理罢了。

【热门文章】
【热门文章】