在完成端口中,对于工作者线程的数量该如何确定?还有如果是创建了20个工作者线程,那么这些线程在处理上千的连接I/O时是如何分配的?如果有10个连接有I/O操作,那么是不是之前创建的20个工作者线程中只有10个运行??如果对这些线程的选择是由谁决定的呢?    还有如果我要进行数据库的操作,那么在处理几千个的连接,数据库仅用一个线程是不是也不能满足要求的!那这样几个数据库线程又是合适的呢?

解决方案 »

  1.   

    不是这样的.
    socket连接与工作者线程没有直接关系.因为所有的socket上的消息都会发送到单一的完成端口.工作者线程只是从完成端口上不断的取消息并处理,一般根据服务器cpu数量,打开 2*cpu数个工作者线程即可
      

  2.   


    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;};
     
    这是我一个网络服务器程序中的连接池定义,仅供参考