select线程池设计

select线程池设计
2007-03-12 17:21

相似于WSAEventSelect线程池设计,也是主要分为监听线程和工作线程

监听线程
while (TRUE)
{
     SOCKET sock = accept(socks, NULL, NULL);
     AddSocket(sock);
}

AddSocket(sock) 工作过程:
     for (i = 0; i < 线程数量; i ++)
     {
         if (AddSocketToThread(pThread, sock)) break;
     }
     如果无空闲线程,新建工作线程,并AddSocketToThread()

AddSocketToThread(pThread, sock) 工作过程:
     if (套接口数量 > 64) return FALSE;
     新建套接口对象,插入即可


工作线程
while (TRUE)
{
     锁定
     for (i = 0; i < 套接口数量; i ++)
     {
         FD_SET(&fdWorks, pSockets[i].sock);
     }
     解锁

     ret = select(0, &fdWorks, NULL, NULL, &tv);
     if (ret <= 0) continue;

     for (i = 0 ; i < fdWorks.fdcount; i ++)
     {
         pSocket = FindSockObj(pThread, fdWorks[i]);
         if (pSocket == NULL) continue;

         HandleIO(pThread, pSocket);
     }
}


 

你可能感兴趣的:(select线程池设计)