本文共 726 字,大约阅读时间需要 2 分钟。
读书笔记–陈硕老师的《linux多线程服务端编程》
为什么要限制并发连接数
如果不限制并发连接数可能会引发的问题
对于reactor模式,listening socket是一种特殊的IO对象。当有新连接到来时,此socket变为可读,epoll_wait会返回这一事件,然后在事件处理器中调用accept获得新连接的socket,但是如果本机的file descriptor已经用尽,则accept会返回EMFILE,标志accept调用失败,新连接依旧在listen的连接池中没有取出来。既然没有socket文件描述符来表示这个连接,所以也不能close它。程序继续执行,调用epoll_wait。但是epoll_wait会立刻返回,因为前面的新连接还在连接池中等待处理,listening fd还是可读的,这样程序就陷入了busy loop中。CPU占用率会达到100%,影响了服务器的性能。解决该问题的方法
muduo采用的是第六种解决方案。
转载地址:http://usqxi.baihongyu.com/