select模型处理超过FD_SETSIZE的连接
lsgt 2006-04-10 08:17:23 使用select模型的时候,如果需要处理的连接超过FD_SETSIZE,看网上的说法都是用多个线程来select,不过具体实现我还有一些疑惑:
由于连接数目事先无法确定,所以我打算用这样的方式处理:
1 线程1,创建监听SOCKET,并加入FD_READ,然后进入select循环,接下来的连接,只要不大于FD_SETSIZE-1,就加入FD_READ,等待接收数据(接收到数据之后的处理略);
2 如果新来一个连接的时候线程池的select队列已满,就新建线程2,并加入线程2的select队列。
这样一来,就有以下问题:
1 如何在有新的连接进入的时候让线程2的select暂时中断,以便可以把新的连接加入到select队列中?
2 当服务器需要停止的时候,如何告诉线程2的select返回?
当然,如果线程2的select给定一个超时值,则可以做到,不过这样一来,又带来问题:
当新的连接进入的时候,必须等待这个超时值结束才可能被接受,这样如果超时值过长,就会影响响应速度,如果超时值过短,大概会降低服务器性能(这个不是太确定,请大虾们解释一下)。
这个问题困惑我已久,请大家帮忙看一下。