随笔分类 - Linux高性能服务器编程
摘要:前面我们讨论了select、poll和epoll三组I/O复用系统调用,这三组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或多个文件描述符上有事件发生时返回,返回值是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集、最大支持文件描述符数、
阅读全文
摘要:即使我们使用ET模式,一个socket上的某个事件还是可能被触发多次,这在并发程序中就会引起一个问题,比如一个线程在读取某个socket上的数据后开始处理这些数据,而在数据的处理过程中该socket上又有新的数据可读,此时另外一个线程被唤醒来读取这些新的数据,于是就出现两个线程同时操作一个socke
阅读全文
摘要:epoll: epoll是Linux特有的IO复用函数,被认为性能最好的一种方法,它和select、poll在实现和使用上有很大差异:1.使用一组函数来完成,而不是单个2.把用户关心的文件描述符上的事件放在内核的一个事件表中,无须向select、poll那样每次调用都要重复传入文件描述符集或事件集,
阅读全文
摘要:select:select系统调用的用途是:在一段指定时间内,监听用户所感兴趣的文件描述符上的可读、可写和异常事件缺点:1.所能监视的文件描述符的数量有限制,sizeof(fd_set)=128,说明能监视的描述符的最大值为128*8=1024个;2.同时每次调用select都需要在内核遍历传递进来
阅读全文
摘要:poll:poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的文件描述符。优点:1.相比select来讲,它没有fd数量的限制,理论上打开fd的数目跟系统内在有关;2.也不用每次都把fd集合从用户区拷贝数据到内核,它使用一个 struct pollfd
阅读全文