高性能服务器编程-线程池
之前介绍了两种高性能服务器编程,今天介绍第三种-线程池。
一、概念
1、为什么要有池?
多线程如果存在客户端链接,创建一个函数线程,客户端关闭,释放线程,服务器大多时间消耗在创建线程,释放线程。这样对于业务的处理时间就会大大减少,所以引入了池来解决问题。
2、池:初始时,申请比刚开始要使用的资源大的多的资源空间,接下来使用时,直接从池中获取资源。
3、线程池:在服务器运行开始时,创建N个线程,将这N个线程用池管理起来,当有用户链接时,从线程池中选取一个线程为其服务,客户端关闭链接后,服务器又将该线程放回到线程池中,线程池中的所有线程到最后一起处理。
二、线程池的实现
1、示例
(1)主线程先创建3条函数线程
(2)主线程等待客户链接,3条函数线程执行P操作二阻塞运行
(3)主线程接收客户链接后,通过信号量的V操作通知一个函数线程和客户端进行通信
2、主线程如何将获得的文件描述符传递给函数线程?
全局数组作为等待函数线程处理的文件描述符的等待队列
3、原理
4、源代码
(1)服务器
(2)客户端
5、测试
(1)客户端
如下图所示,共创建了三个函数线程
(2)服务器
在服务器端显示的结果可以明显看出是有三个客户端,分别是4 、5 、6