第四部分 服务器的工作模式

来源:互联网 发布:淘宝买了假货怎么投诉 编辑:程序博客网 时间:2024/06/18 12:24

现在网络服务器一般工作在多线程模式下,主线程负责侦听和接入来自客户端的链接请求,在收到一个连接请求之后转交给另一个线程进行处理,自身继续返回侦听状态。

在如何处理客户端请求方面,有两种选择:1。每当收到请求之后实时地创建一个新线程;2。在服务器启动时便预先创建一批线程,这些线程在空闲时处于等待状态,当接入到一个新请求后,服务器从这些线程中唤醒一个,使其成为工作线程,处理接入的请求。

就第一种来说,创建线程需要消耗一定的资源,具有潜在的不稳定因素。在需要时才创建线程,为服务器整体稳定性带来了隐患。好处是所能响应的客户端请求的数量仅受服务器性能的制约,在服务器能承受的范围之内,都能创建新线程处理客户端的请求。

第二种方式也成为线程池方式。优势是响应请求的速度快,因为工作线程在服务器启动之初便已创建完毕,在需要时只需从线程池中取出即可。

线程池一

下面实例充分的演示线程池的作用,突出线程池处理短请求的特点。客户端请求非常短,只要求服务器从线程池中调度处一个线程,将客户端传给服务器的字符串输出在控制台上。

客户端代码【Commander

服务器端代码【ThreadManager

运行结果如下:

客户端控制台:

服务端控制台:

线程池二

本实例演示线程池状态的管理。服务器根据客户端输入的以下指令调度池中的线程。

report:报告目前线程池中有几个线程处于运行状态。

pause:线程池中的全部线程进入等待状态。

step:唤醒处于等待状态的线程中的一个,如果没有任何线程处于等待状态,则不起任何作用。

run:唤醒全部处于等待状态的线程,如果没有任何线程处于等待状态,则不起任何作用。

stop:终止全部线程,销毁线程池。

客户端的代码和上面的一样,服务端代码如下:【ThreadManager2

客户端运行结果如下:

服务端运行结果如下:

原创粉丝点击