更多关于异步编程的内容!
好的,我现在已经有一个可以正常工作的异步套接字程序用于我的主要聊天应用程序,它运行得非常顺畅!但是我有一个问题..
使用select()时,每个集合中可以使用的文件描述符的最大数量是多少?我读到了1024的限制...
如果这个限制确实是硬编码的,我不能将FD_SETSIZE限制得更高,那么一旦达到该限制,我应该生成另一个线程吗?还是其他什么方法?这真的是一个问题吗?
更多关于异步编程的内容!
好的,我现在已经有一个可以正常工作的异步套接字程序用于我的主要聊天应用程序,它运行得非常顺畅!但是我有一个问题..
使用select()时,每个集合中可以使用的文件描述符的最大数量是多少?我读到了1024的限制...
如果这个限制确实是硬编码的,我不能将FD_SETSIZE限制得更高,那么一旦达到该限制,我应该生成另一个线程吗?还是其他什么方法?这真的是一个问题吗?
是的,FD_SETSIZE 有一个限制,为1024。您可以通过查看select.h头文件来轻松检查这一点。人们尝试增加这个限制,但报告从“可工作”到“一段时间后崩溃”不等。如果您需要那么多连接,请使用poll
代替。
如果您在一个符合Posix标准的系统下编程,您应该能够使用poll()函数代替select()函数,这样就可以消除您提到的限制。或者,您可以连续多次调用select()函数,但一定要使用相对较短的超时时间。
libevent
这样的库。您没有说明您使用的操作系统,但对于大多数操作系统而言,如果您想要在使用select时使用大于1024的文件描述符,您可以在包含sys/socket.h之前将#define FD_SETSIZE
定义为更大的数字。不幸的是,这在Linux上不起作用。