The first wealth is health .(Ralph Waldo Emerson , American thinker)
健康是人生第一财富。(美国思想家 爱默生。 R. W.)
TCP select多路复用IO复用实现群聊功能
上一篇博客中写到如何利用线程实现群聊功能,本文就换一种实现机制——selent复用来监控多个文件描述符,点击跳转。
为何需要多路复用
在实际操作中往往需要操作多个设备文件,应用程序中同时处理多路输入输出流,若采用阻塞模式,将得不到预期的目的。举个栗子:一个程序需要同时监控鼠标和键盘,但不知道事件何时发生,调用的API又会阻塞,不能同时监控多个设备。
若采用非阻塞模式,对多个输入进行轮询,但又太浪费CPU资源,若设置多个进程,分别处理一条数据通路,将新产生进程间的同步与通信问题,使程序变得更加复杂。
linux也提供了解决方法,使用I/O多路复用。其基本思想是:
selent多路复用API
select 多路复用
#include <sys/select.h>
/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
函数功能: