深度学习Nginx第四章:Nginx与网络事件以及驱动模型

本文深入探讨了Nginx的网络事件处理,详细介绍了Nginx如何利用事件收集、分发器处理网络请求。讲解了同步、异步、阻塞与非阻塞的概念,并对比了Nginx与传统服务的区别。此外,文章还涵盖了Nginx的模块、连接池管理、进程间通信以及使用Slab管理器进行共享内存分配。通过对Nginx事件循环的分析,揭示了其高效处理高并发连接的秘密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Nginx是一个事件驱动的,主要事件是指网络事件,Nginx每个网络连接自然对应两个网络事件,一个读事件一个写事件。

什么是网络事件:

应用层发送get请求,传输层主要做一个事情,打开一个端口,把自己端口和nginx端口记录下来,传输层把我们主机ip和目标主机公网ip记录下来,到达链路层通过以太网到我们加的路由器,路由器主要记录我们所在运营商的ip,通过广域网跳转到服务器b的路由器中,通过链路层和网络层以及传输层,通过传输层我们就知道给我们打开80或者443端口进程也就是nginx,nginx在他们http状态处理机里面处理这个请求。TCP层主要做进程与进程间通信的事情,IP层主要解决机器与机器间怎么找到的问题

报文:

TCP协议与非阻塞接口:

读事件:Accept:建立连接  、Read:读消息

写事件:Write写消息

其中在事件收集、分发器处理消费者,事件是一个生成者到nginx,不同时间段调用相对于消费者包括openrestry、lua同步代码

 

Nginx事件循环:

刚刚启动的时候在wait for events这里,打开80/443端口,等待新的事件进来,新的客户端连接事件,这样的事件对于我们epoll里面的epoll wait这个方法,当操作系统处理完握手流程完后,就会通知我们epoll wait阻塞方法,然后唤醒我们nginx  work进程,这里的kernel就是操作系统内核,然后把事件放在事件队列中,然后右图处理事件的循环,如果发现新的事件,比如发现一个链接新建立了。可能要添加一个操作时间,如果事件内浏览器没有发送请求则关掉链接,然后处理完后把响应写事件在操作系统写缓存,然后发给浏览器中,如果处理完后又到wait for events。 如果使用第三方模块导致cpu复杂运算,导致处理时间特别长,导致后续队列大量事件得不到处理,导致恶性循环,然后时间到了,nginx大量处理在连接和不正常断开,所以nginx不能容忍这个事情,很多第三方都不会一次使用cpu大量计算,而是分段使用

 

epoll的优劣:nginx的事件分发机制,epoll运行nginx事件驱动框架,在那个循环流程中,nginx怎么样能够从操作系统的kernel中获取等待处理的事件,nginx主要使用epoll这种网络收集器模型,epoll对于句柄数增加几乎是无关的,比较适合做大并发连接处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值