随笔分类 -  网络编程

摘要:本文主要对比Muduo多线程模型方案8 和方案9 。 方案8:reactor + thread pool ,有一个线程来充当reactor 接受连接分发事件,将要处理的事件分配给thread pool中的线程,由thread pool 来完成事件处理。实例代码见:examples/sudoku... 阅读全文
posted @ 2015-04-11 12:27 KingsLanding 阅读(2676) 评论(0) 推荐(0) 编辑
摘要:使用I/O multipexing 的网络编程中,一般需要采用非阻塞网络编程的风格,防止服务端在处理高连接量大时候阻塞在某个文件描述符上面,比如某个socket 有大量的数据需要写,但是内核发送缓冲区已经填满,无法在一次write中将需要发送到数据发送出去,程序就会阻塞在该处,导致select/poll/epoll_wait() 此时不能处理其它到来的请求,同样read或者accept也可能出现阻塞的情况,比如当客户端发起connect,之后立刻关闭该链接,在服务端尚未调用accept之前就关闭了该连接,当后来服务端accept得以调用此时完成队列中又没有完成的三次握手的连接,accept.. 阅读全文
posted @ 2014-02-21 19:52 KingsLanding 阅读(1763) 评论(0) 推荐(0) 编辑
摘要:前两篇文章介绍了select,poll,epoll的基本用法,现在我们来看看它们的区别和适用场景。首先还是来看常见的select和poll。对于网络编程来说,一般认为poll比select要高级一些,这主要源于以下几个原因:poll() 不要求开发者计算最大文件描述符加一的大小。poll() 在应付大数目的文件描述符的时候速度更快,因为对于select()来说内核需要检查大量描述符对应的fd_set 中的每一个比特位,比较费时。select 可以监控的文件描述符数目是固定的,相对来说也较少(1024或2048),如果需要监控数值比较大的文件描述符,就算所监控的描述符很少,如果分布的很稀疏也会效 阅读全文
posted @ 2014-02-17 22:09 KingsLanding 阅读(3085) 评论(0) 推荐(1) 编辑
摘要:上一篇介绍了select的基本用法,接着来学习一下poll和epoll的基本用法。首先来看poll:#include int poll (struct pollfd *fds, unsigned int nfds, int timeout); poll() 采用了struct pollfd 结构数组来保存关心的文件描述符,而不是像select一样使用三个fd_set ,pollfd结构体定义如下:struct pollfd { int fd; /* file descriptor */ short events; /* requested events to watch */... 阅读全文
posted @ 2014-02-15 23:28 KingsLanding 阅读(907) 评论(0) 推荐(0) 编辑
摘要:Linux Socket 编程中I/O Multiplexing 主要通过三个函数来实现:select, poll,epoll来实现。I/O Multiplexing,先构造一张有关描述符的列表,然后调用一个函数,直到这些描述符中的一个已准备好进行I/O时,该函数才返回。在返回时,它告诉进程哪些描述符已准备好可以进行I/O。本文具体介绍一下select 和poll的用法,给出简单的demo代码,简要分析一下这两个函数的使用易出错的地方。 #includeint select(int maxfdp1, fd_set *restrict readfds, fd_set *restrict ... 阅读全文
posted @ 2014-02-15 11:09 KingsLanding 阅读(1007) 评论(0) 推荐(0) 编辑