IO多路复用之epoll篇
前言
前两篇分别介绍了IO多路复用的select()
和poll()
。
select()
解决了传统的网络编程中,一个线程只能服务一个客户端连接的问题,但是最多只能同时监听1024个文件描述符,并且效率比较低。poll()
解决了select()
监听文件描述符个数限制的问题,但是并没有解决效率的问题。
本篇介绍epoll()
,既解决了描述符个数限制的问题,又解决了效率问题。
前两篇分别介绍了IO多路复用的select()
和poll()
。
select()
解决了传统的网络编程中,一个线程只能服务一个客户端连接的问题,但是最多只能同时监听1024个文件描述符,并且效率比较低。poll()
解决了select()
监听文件描述符个数限制的问题,但是并没有解决效率的问题。本篇介绍epoll()
,既解决了描述符个数限制的问题,又解决了效率问题。
前一篇介绍了IO多路复用中的select()
,但是select()
的缺点很明显,监控描述符的个数不能超过1024个,所以后来为了解决这个问题,引入了poll()
,理论上poll()
监听的描述符个数不受限制,但是实际能监控的描述符个数和机器自身的硬件配置有关系。
在Linux
系统下,select()
为最早支持IO多路复用的系统调用。该接口相比poll()
、epoll()
来说,更为简单,但是效率较低,而且最大只支持FD_SETSIZE
(1024)个描述符。如果对并发数量的要求高于1024,请考虑使用poll()
或者epoll()
。
在联网的Linux
环境上安装PostgreSQL
、PostGIS
,可能就是几句命令的事儿,相关的依赖可以自动安装,但是在离线的环境下安装,需要先编译安装各个依赖。
本文以麒麟服务器4.0.2
为测试环境,离线编译安装PostgreSQL 12.2
和PostGIS 3.0.5
。有联网的环境,安装方法请参考其他教程。