序言:
首先,明确机制前要区分好基础概念:同步?异步?阻塞?非阻塞?用户?内核?等操作系统的基础概念。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hBC93fOZ-1649335704395)(https://upload-images.jianshu.io/upload_images/2062729-49ac9eb7d4d2d019.png?imageMogr2/auto-orient/strip|imageView2/2/w/786/format/webp)]
- 阻塞模型:最简单的,有性能代价;
- 同步非阻塞:轮询,整体响应有延迟;
- IO多路复用:'select、poll、epoll ’ ,等函数,相较于轮询更加高效
- 以上这些都可以归结为同步模型;
- 根据我们的设计思路,肯定是要考虑同步IO的,所以就不再介绍异步模型了。
考虑到设计的性能和复杂程度,我们优先考虑采用的模型是IO多路复用。考虑到:
所以,如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。(select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。)
还是应该统摄设计多种方案,比较后采用较为高效的。