分享 Linux 下的 IO 多路复用的三个问题

razertory · 2019年05月11日 · 3300 次阅读

什么是 IO 多路复用?

IO 多路复用,源名称是 I/O multiplexing。 「multiplexing」在剑桥辞典的解释为:

an electronic process that allows more than one electrical signal to be sent using only one connection

意为:只在一个电路连接下可以发送多个信号的电子化过程。

这里的 multiplexing 指的是在单个线程通过记录跟踪每一个 Sock(I/O 流) 的状态来同时管理多个 I/O 流。

再通俗一点,就是单个线程管理多个 socket。现今主流的方法分别叫做 select,poll 和 epoll。

它们都在哪儿?

它们分别来自于 <sys/select.h><sys/poll.h><sys/epoll.h> 这三个头文件中。我们开发常用的 Mac OS 下,没有 epoll.h 的哦。所以如果你想试试 linux 的 epoll 最好找一台内核 2.5.44 以上的机器跑一下。比如说去你自己的 VPS 上,或者上你家主子的开发服务器上试一试。如果你想看源代码,推荐 select, poll, epoll

它们的原理各是什么?

不讲,答案在下一个问题。

我如何在代码里面用上?

如果你只是写简单的 Web 服务,那肯定是用不上的。如果你真想学一下,分别 gcc 跑一下这三个文件就知道了,都已经写好了。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号