单机高性能网络模型
传统网络模型
PPC和prefork
简单
fork代价高 性能低、父子进程通信要用IPC 监控统计等实现起来会比较复杂、OS上线问切换会限制上线文连接数 一般为几百
TPC和prethread
实现简单、无需IPC线程间通信即可、无需fork创建线程代价低
线程互斥和共享比ppc更复杂、某个线程异常可能造成整个进程退出、OS上线问切换会限制上线文连接数 一般为几百 但是高于PPC
reactor网络模型 基于多路复用的事件响应网络编程模型
多路复用:多个连接复用同一个阻塞对象
事件响应:不同的事件分发给不同的对象处理
实现比传统网络模型复杂
支持海量连接
单reactor 单进程/单线程
实现简单 无进程通信 无线程通信和互斥;无上下文切换,某些场景下性能可以做到很高
单进程无法发挥多核cpu性能,只能部署多个系统利用cpu,但是会增加运维复杂度;Handler在处理某个连接上的业务时,整个进程无法处理其他连接的事件,可能导致性能瓶颈
单reactor 多线程
充分利用多核cpu的优势 性能高
多线程数据共享和访问比较复杂;reactor承担所有事件的监听和响应,只能在主线程中运行,瞬时高并发可能成为性能瓶颈
多 Reactor 多进程/线程
充分利用多核CPU的优势,性能高;实现简单,父子进程(线程)交互简单subReactor子进程(线程)之间无互斥共享或通信
没有明显缺点,只是相对复杂
proactor网络模型
理论性能上要比reactor性能高,实测差别不大 10%
操作系统实现复杂,linux支持不成熟;程序调试复杂
网络模型对比