关闭

linux c++ socket 网络编程(2) select 异步非阻塞

标签: C++网络编程socketlinuxselect
1687人阅读 评论(0) 收藏 举报
分类:

1.3. 多路复用

上面的方法可以完成单个线程处理多个socket读写的。但这样的轮询方式,一定无法应付大量的请求,因为效率太低了,仅处理网络IO就要消耗掉大量的CPU资源,这是十分不可取的。

那所谓的多路复用,就是要解决低效的问题。个人理解复用,就是将多个低速率的流,合成一个高速率的流,来达到提高利用率的目的。放在网络编程模型里的多路复用,就是将多个低速的网络IO流,合成一个高速的网络IO流,然后再由CPU处理。因为CPU的速度实在比网络IO要快太多了。

 

图表 1 select多路复用

如上图所示,一个采用select/poll/epoll进行多路复用的大致过程是,通过select/poll/epoll调用,从所有的socket中获得可读/可写的socket集合,然后对这些可读/可写的socket直接进行读取/写入操作。

与阻塞模型不同的是,阻塞模型在读写socket时,是不能得知该socket的状态的,所以在recv/send时,可能被阻塞。

而经过selectsocket集合,其状态是确定的,对其进行recv/send时,几乎可以立即执行并返回,而不会阻塞线程,从而达到将多个socket在一个线程中合并处理的效果,达到多路复用的目的。

(未完待续)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20241次
    • 积分:313
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论