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

razertory · May 11, 2019 · 3301 hits

什么是 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 跑一下这三个文件就知道了,都已经写好了。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.