epoll编程,单epoll+线程池?线程池+epoll?nginx实现高并发的原理?

本文探讨了epoll编程在高并发服务器开发中的应用,解释了为何event-loop在IO密集型场景优于线程模型。对比了单个epoll+线程池和每个线程一个epoll在处理大量短连接场景的优劣。详细阐述了nginx如何通过多进程模型,特别是master和worker进程,以及利用epoll的IO多路复用技术来避免惊群现象,实现高效的并发处理。文章还讨论了nginx与多进程模式的Apache在性能上的差异。
摘要由CSDN通过智能技术生成

草稿未验证

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. 1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。

  2. 2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。

  3. 3、 master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。

注意 worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。

使用多进程模式,不仅能提高并发率,而且进程之间相互独立,一个 worker 进程挂了不会影响到其他 worker 进程。

 

惊群现象

主进程(master 进程)首先通过 socket() 来创建一个 sock 文件描述符用来监听,然后fork生成子进程(workers 进程),子进程将继承父进程的 sockfd(socket 文件描述符),之后子进程 accept() 后将创建已连接描述符(connected descriptor)),然后通过已连接描述符来与客户端通信。

那么,由于所有子进程都继承了父进程的 sockfd,那么当连接进来时ÿ

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值