本文主要介绍常见的Server的并发模型,这些模型与编程语言本身无关,有的编程语言可能在语法上直接透明了模型本质,所以开发者没必要一定要基于模型去编写,只是需要知道和了解并发模型的构成和特点即可。
在了解并发模型之前,我们需要两个必备的前置知识:
socket网络编程
多路IO复用机制
多线程/多进程等并发编程理论
提纲
模型一
单线程Accept(无I/O复用)
模型二
单线程Accept+多线程读写业务(无I/O复用)
模型三
单线程多路I/O复用
模型四
单线程多路I/O复用+多线程读写业务(业务工作池)
模型五
单线程多路I/O复用+多线程多路I/O复用(线程池)
模型五(进程版)
单进程多路I/O复用+多进程多路I/O复用(进程池)
模型六
单线程多路I/O复用+多线程多路I/O复用+多线程
模型一、单线程Accept(无I/O复用)
01
模型结构图02
模型分析① 主线程main thread
执行阻塞Accept,每次客户端Connect链接过来,
main thread
中accept响应并建立连接② 创建链接成功,得到
Connfd1
套接字后, 依然在
main thread
串行处理套接字读写,并处理业务。③ 在②处理业务中,如果有新客户端
Connect
过来,
Server
无响应,直到当前套接字全部业务处理完毕。④ 当前客户端处理完后,完毕链接,处理下一个客户端请求。
03
优缺点 优点:socket编程流程清晰且简单,适合学习使用,了解socket基本编程流程。
该模型并非并发模型,是串行的服务器,同一时刻,监听并响应最大的网络请求量为
1
。即并发量为1
。仅适合学习基本socket编程,不适合任何服务器Server构建。
模型二、单线程Accept+多线程读写业务(无I/O复用)
01
模型结构图02
模型分析① 主线程main thread
执行阻塞Accept,每次客户端Connect链接过来,
main thread
中accept响应并建立连接② 创建链接成功,得到
Connfd1
套接字后,创建一个新线程
thread1
用来处理客户端的读写业务。
main thead
依然回到