I/O多路复用模式与线程并发模式
2018-03-19 16:27
197 查看
一个高性能的服务器,必定要解决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章节的内容:
可参考:1.Socket编程模式理解与对比2.http://www.yeolar.com/note/2012/12/15/high-performance-io-design-patterns/
4.摘自孙卫琴主编《Java网络编程精解》第4.1章节的内容:
可参考:1.Socket编程模式理解与对比2.http://www.yeolar.com/note/2012/12/15/high-performance-io-design-patterns/
相关文章推荐
- I/O多路复用模式与线程并发模式
- 小试牛刀TCP 网络编程模式,单线程多路复用实例
- Linux IO模式-阻塞io、非阻塞io、多路复用io
- 高并发服务器设计之多路复用模型
- rn_xtcxyczjh-7 并发[线程3 嵌套锁与装饰模式]
- Swing中的并发-使用SwingWorker线程模式
- Java高并发程序-Chapter3 JDK并发包(第十九讲)线程复用:线程池
- java并发包:线程复用之线程池
- linux网络编程----->高并发--->select多路I/O复用服务器
- (转)Swing中的并发-使用SwingWorker线程模式
- 并发方式 之io多路复用
- java NIO的多路复用及reactor模式
- Linux IO模式-阻塞io、非阻塞io、多路复用io
- 并发服务器:多路复用I/O
- 并发控制(3) 使用double check方式的单例,来确保并发下的线程安全的单例模式
- java并发的线程安全单例模式
- 高并发下最全线程安全的单例模式几种实现
- Swing中的并发-使用SwingWorker线程模式
- I/O多路复用之水平触发和边沿触发模式
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(18)--- 线程特定的存储器