草稿未验证
1 epoll编程,如何实现高并发服务器开发?
- 知乎 https://www.zhihu.com/question/21516827/answer/55127881
nginx 多进程网络编程的巅峰
memcached 多线程网络编程的巅峰
redis单线程网络编程的巅峰~~
2 为什么说 event-loop 在 IO 密集型场景中比线程模型更高效?
https://www.zhihu.com/question/67751355/answer/256921689
3 单个 epoll + 线程池与每个线程一个 epoll 这两种架构哪个更适合大量短连接的场景?
3.1
单个 epoll + 线程池与每个线程一个 epoll 这两种架构哪个更适合大量短连接的场景? - kanmars的回答 - 知乎 https://www.zhihu.com/question/271561199/answer/374711772
相关知识可以查看书籍《UNIX环境高级编程》中的重点章节。
单epoll+线程池?线程池+epoll?
3.2 https://www.zhihu.com/question/271561199/answer/374621127
不需要线程池。线程池的应用场景是线程数量不断增减的情况,因此需要用一个池来不断维护申请与释放。
现在主流做法是按cpu核心数量开线程数量,线程数量恒定不变,等于epoll数量。这种情况下,由于线程数量固定,线程池毫无优势。
4 nginx实现高并发的原理
nginx是以多进程的方式来工作的。
nginx在启动后,会有一个master进程和多个worker进程。
多进程的工作模式
-
1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。
-
2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。
-
3、 master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。
注意 worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。
使用多进程模式,不仅能提高并发率,而且进程之间相互独立,一个 worker 进程挂了不会影响到其他 worker 进程。
惊群现象
主进程(master 进程)首先通过 socket() 来创建一个 sock 文件描述符用来监听,然后fork生成子进程(workers 进程),子