参考书籍《tomcat内核设计剖析》
阻塞IO:是指读写的时候是阻塞的,就是说程序去读写数据时候,如果当前没有数据可以读写,会一直等待。读数据时直到数据到达并且把操作系统内核复制到用户进程后,才解除阻塞状态。写数据时,等待用户进程将数据写入内核并发送出去后才解除阻塞状态。
单线程阻塞IO
这种模型只能同时处理一个客户端访问,并且在I/O操作上是阻塞的,线程会一直等待,而不会做其他事情。对于多个客户端访问,必须要等到前一个客户端访问结束才能进行下一个访问的处理,请求一个一个排队,只提供一问一答服务。
如图,就算客户端2请求是在服务器处理客户端请求1的期间到达的,也是要等待服务器对客户端1响应后,才会处理客户端2的请求。
特点:它是最简单的服务器模型,整个运行过程都只有一个线程,只能支持同时处理一个客户端的请求。服务器系统资源消耗比较小,但并发能力低,容错能力差。
多线程阻塞IO :
多线程的核心就是为每个客户端分配一个线程。如图
特点:支持对多个客户端的并发响应,处理能力大幅提高,有较大的并发量,但服务器系统资源消耗量较大,而且多线程之间会产生线程切换成本,同时拥有较复杂的结构。
单线程非阻塞IO:
基于回调的事件检测方式
服务器端有多个客户端连接。首先应用层告诉内核每个套接字感情趣得的事件。接着,当客户端发送数据过来时,对应一个回调函数,内核从网卡复制数据成功后即调回调函数将套接字作为可读事件加入到事件列表中。同样,内核发现网卡可写时就将套接字作为可写事件添加带事件列表中。最后应用层向内核请求读写事件列表,内核将包含了可读,可写事件列表返回应用层。
服务器模型
最新推荐文章于 2022-08-31 21:47:38 发布