1)原理分析
线程池的核心设计思想是系统在初始化时,创建一定数量的服务线程,并使他们处于空闲状态,若当前有新用户到来,则系统先查找当前有无空闲线程,若有则立即为其分配服务线程,如没有,则将新用户加入待服务队列,并在其他用户结束服务时,再重新为其分配服务线程。
新用户如果在等待服务队列里的时间过长,会影响用户体验。
方法:1、动态创建新服务线程,服务结束后,该线程加入到线性池,但大量的用户下,使线程池变得很大,最后因资源消耗过多。2、在1的基础上增加线程资源回收机制。当线程规模达到一定程度,会主动杀死一些进程。
该系统简单的设计方案:
1、系统在初始化时,开辟MAX_NUM个线程(MAX_NUM是个宏,默认20)组成服务线程池
2、每个线程均分为有两个状态,一个是空闲状态,另一个是工作状态,每个线程均有一块属于自己的公共数据区域,这块数据区域中存放两个变量,其中一个变量标记自身状态,0则表示处于空闲状态;1则为工作状态。另一个变量对应客户端的套接字号,如果线程处于空闲状态,则套接字号为0;
3、有新用户到来时,系统通过查找公共数据区域,判断当前是否有空闲线程,若有则直接为其分配服务线程。
4、若当前没有空闲程序,系统将不做任何处理,提示当前系统忙,关闭新客户套接字。
待续……