I/O多路复用模式与线程并发模式

        一个高性能的服务器,必定要解决IO多路复用和多线程服务的问题,本文在学习《面向模式的软件架构--并发和联网对象模式》后的一点体会。

1.I/O多路复用模式:

         在常规的I/O多路复用中采用select或poll或epoll系统级别的函数来实现,基于这些函数形成的多路复用模式为reactor和proactor模式。该模式的实现机制是将事件注册到reactor中,当事件所需要的资源准备就绪时reactor就会去回调该事件当初注册到reactor的函数,无需轮询所有的事件源或者无限期阻塞任一单个事件源,就能处理来自多个事件源的多个同步事件。通过reactor的实现机制我们能看到reactor解决的问题是多用户大并发访问后端服务时进行分发,分发到后端的各个服务线程。

2.多线程服务模式:

       上面提到IO的多路复用,即多用户高并发访问服务端时的分发模式,当客户端的请求分发到后端服务线程对其处理时,多线程的服务模式主要有:半同步半异步模式、领导者/跟随者模式。这两种模式主要解决的是多线程各自运行的机制。

3.多并发服务模型的三种技术演进

第一种,基本的socket编程是阻塞/同步的(accept、read和write等api默认情况下都是阻塞的),每个操作除非已经完成或者出错才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没法支撑大量的请求。第二种,设置socket的api为异步的,采用阻塞的系统函数select或poll来同时检测句柄fd是否可读/写,但是因为其采用了轮询的方式来判断某个fd是否变成active,效率不高o(n)。第三种,基于异步/callback的系统调用,例如linux的epoll,BSD的kqueue,windows的IOCP。由于在内核层面做了支持,所以可以再o(1)的效率查找到active的fd。 

4.摘自孙卫琴主编《Java网络编程精解》第4.1章节的内容:


可参考:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值