- 博客(4)
- 收藏
- 关注
原创 服务器网络模型(4)---网络框架模型
在I/O模型的讨论中,我们没有引入线程的概念,也没有区分其对accept和read的不同行为,我们在这里将他们引入I/O模型中,并与线程池模型组合,将会看到很多有趣的网络框架模型。同样,在这里我们不讨论I/O模型是Reactor还是Proactor,除非有特殊需要。 1.单线程模型 如上图所示,所有的处理过程都在一个线程中,这种模型下能做到零数据拷贝,零切换(
2011-12-30 18:37:22 4366
原创 服务器网络模型(3)---工作线程与线程池模型
工作线程负责请求的具体处理,也与具体的服务器功能相关。实际上,多个线程的组织一般是松散的,好的设计应该完全避免各线程之间的干扰,同时减少线程的切换(如果工作线程不存在阻塞I/O和长耗时处理过程,建议线程数少于CPU核数)。在不考虑I/O的情况下,线程池一般有两种实现,【半同步/半异步】和【领导者/跟随者】模式。 半同步/半异步模型 关于半同步/半异步的解释可以参考POSA2,简单
2011-12-30 18:08:54 4818
原创 服务器网络模型(2)---服务器的请求处理流程
服务器的请求处理大致可以分为以下几个阶段: 前面的I/O模型负责了【事件分离】阶段,【处理请求】阶段由工作线程来完成,而【断包】阶段在不同的模型中会选择前靠或者后靠,因为断包和具体的服务器协议有关,因此难以在框架阶段做更多的假设(定长包头协议和流式协议是完全不同的处理方式),根据不同的网络框架,断包是紧靠【事件分离】还是紧靠【处理请求】,它是受一定限制的。
2011-12-30 18:06:10 3734
原创 服务器网络模型(1)--I/O模型与I/O复用
基本的I/O分为阻塞式和非阻塞式,而在非阻塞的情况下,又可进一步分为同步和异步,归类下来,分为三种: l 阻塞式:以read()为例,它是停等式的读,在fd不可读时,会阻塞住线程继续等下去。一般高并发服务器比较少用。 l 同步非阻塞:它解决了阻塞式中停等的问题,在fd不可读时,会立即返回失败。一般结合一个统一的I/O复用机制(比如select、epoll)来对多fd
2011-12-30 18:03:33 4267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人