常见并发模型对比
2021-03-09 本文已影响0人
Karel_
并发模型 | 【UNP】对应 | 多进程 | 多线程 | 阻塞IO | IO复用 | 长连接 | 并发性 | 多核 | 开销 | 互通 | 顺序性 | 线程数 | 特点 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
accept+read/write | 0 | 否 | 否 | 是 | 否 | 否 | 无 | 否 | 低 | 否 | 是 | 是 | 一次服务一个客户 |
accept+fork | 1 | 是 | 否 | 是 | 否 | 是 | 低 | 是 | 高 | 否 | 是 | 变 | process-per-connection |
accept+thread | 6 | 否 | 是 | 是 | 否 | 是 | 中 | 是 | 中 | 是 | 是 | 是 | thread-per-connection |
prefork | 2/3/4/5 | 是 | 否 | 是 | 否 | 是 | 低 | 是 | 高 | 否 | 是 | 变 | 见【UNP】 |
pre threaded | 7/8 | 否 | 是 | 是 | 否 | 是 | 中 | 是 | 中 | 是 | 是 | 变 | 见【UNP】 |
poll(reactor) | 6.8节 | 否 | 否 | 否 | 是 | 是 | 高 | 否 | 低 | 是 | 是 | 常 | 单线程reactor |
reactor+thread-per-task | 无 | 否 | 是 | 否 | 是 | 是 | 中 | 是 | 中 | 是 | 否 | 变 | thread-per-request |
reactor+worker thread | 无 | 否 | 是 | 否 | 是 | 是 | 中 | 是 | 中 | 是 | 是 | 变 | worker-thread-per-connection |
reactor+thread pool | 无 | 否 | 是 | 否 | 是 | 是 | 高 | 是 | 低 | 是 | 否 | 常 | 主线程io,工作线程计算 |
reactors in threads | 无 | 否 | 是 | 否 | 是 | 是 | 高 | 是 | 低 | 是 | 是 | 常 | one loop per thread(muduo) |
reactors in process | 无 | 是 | 否 | 否 | 是 | 是 | 高 | 是 | 低 | 否 | 是 | 常 | one loop per process(nginx) |
reactors+thread pool | 无 | 否 | 是 | 否 | 是 | 是 | 高 | 是 | 低 | 是 | 否 | 常 | 最灵活的io与cpu配置 |