在完成端口中,对于工作者线程的数量该如何确定?还有如果是创建了20个工作者线程,那么这些线程在处理上千的连接I/O时是如何分配的?如果有10个连接有I/O操作,那么是不是之前创建的20个工作者线程中只有10个运行??如果对这些线程的选择是由谁决定的呢? 还有如果我要进行数据库的操作,那么在处理几千个的连接,数据库仅用一个线程是不是也不能满足要求的!那这样几个数据库线程又是合适的呢?
调试欢乐多
socket连接与工作者线程没有直接关系.因为所有的socket上的消息都会发送到单一的完成端口.工作者线程只是从完成端口上不断的取消息并处理,一般根据服务器cpu数量,打开 2*cpu数个工作者线程即可
class Pool
{
public:
_ConnectionPtr GetConnection();
int Remove(_ConnectionPtr conn);
int Add(_ConnectionPtr conn);
int ReleaseConnection(_ConnectionPtr conn);
Pool(int size);
virtual ~Pool();
private:
list<_Connection*> _pool;
Event _connin;
CriticalSection _s;};
这是我一个网络服务器程序中的连接池定义,仅供参考