日期:2008-04-07  浏览次数:20525 次

偶目前对于线程池的理解
在多线程程序中,如c/s模式中的server端最好用线程池来提高程序性能,
在程序起动时创建一定数量的线程以备使用,

socket侦听到连接后把连接放入一个全局client socket列表中,
使用socket.select把有可读数据的client socket存入一个临时列表中,
循环client socket取出每个连接放入(向线程传参数,还是其它方法?还没研究过)事先建立好的空闲的线程中处理。处理完线程设回空闲等待下一个任务。

这样做的好处是可以使用非阻塞的socket
以前为每个客户端建立一个线程,在维护客户端连接的有效性方面很麻烦,使用了很多线程,但其实线程在很多时候都是处于阻塞等待客户端数据状态,浪费系统资源。
使用非阻塞socket在Receive到0数据时应该可以认为socket连接以断开(未证实)
使用线程池,在需要处理数据时把处理任务交到挂起中的线程中,处理完成后在挂起等待下个任务。这种方式更加能有效的使用系统资源。