C++网络编程(卷1):学习笔记(四)
服务器可以分为iterative,concurrent,reactive等几大类
iterative服务器在处理后续请求之前,会完整地处理每一个客户的请求。在处理一个请求时,要么将其他请求排成队列,要么忽略。因此最适合以下两种服务:短期服务和不经常运行的服务
concurrent服务器同时处理多个客户请求,在执行服务时,要么使用多线程,要么使用多进程。并发式服务器非常适合“I/O操作频繁”的服务和“执行时间会变化”的长周期服务
reactive服务器几乎是同时处理多个请求---尽管所有的处理实际上在一个线程中完成。存在以下局限性:编程的复杂性增加,可靠性和性能降低
Eager spawning : 线程池:1)Half sync/Half async
2) Leader/Followers
On demand spawning: 每个请求一个线程;每个连接一个线程
线程调度模型:N:1模型 (进程竞争范围)1个用户进程阻塞会影响整个进程的所有线程
1:1模型 这里也称系统竞争范围
N:M模型 这里综合了上面两种情况,并针对阻塞做了特殊处理
这里的指的是用户的线程与内核的线程的对应关系
并发体系是联系以下要素的纽带:CPU,数据和控制消息,执行任务的服务
并发体系的规范类型有:
1.“基于任务”的体系。任务是主动的,任务中处理的消息是被动的。在一个任务中,或一个层次上,一般不需要同步
2.“基于消息”的体系。消息是主动的,任务是被动的。需要复杂的并发控制