https://cloud.tencent.com/developer/article/1886166?areaSource=&traceId=
这些天呐,实在是给我看晕了。起因自然还是对 nginx 不是很了解哈。那我是来看什么的?一开始就从细节出发,有点管中窥豹,不得全貌了。
图来自网络
预定:后边专门出一篇关于 nginx进程模型源码分析。这些概念都好记,也好理解,但是里面有的地方我想不到该怎么写,好吧,就是异步,异步不会写,所以要去看一下大神是怎么写的。
1、nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。 2、nginx采用了异步非阻塞的方式来处理请求。
3、线程只有一个,所以同时能处理的请求只有一个,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价。 与多线程相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级。并发数再多也不会导致无谓的资源浪费(上下文切换)。更多的并发数,只是会占用更多的内存而已。
预定:这个要出好几篇了,核心模块、事件模块、Stream模块,以及它们下属的技术点可能也要铺开,估计五六篇吧。
其他模块视情况而定吧。
(被遮住的是 ngx_conf_module)
① 核心模块(core)
该模块提供了 Nginx 服务运行的基本功能,如 Nginx 的进程管理、CPU 亲缘性、内存管理、配置文件解析、日志等功能。
② 事件模块(event)
该模块负责进行连接处理,提供对不同操作系统的 I/O 网络模型支持和自动根据系统平台选择最有效 I/O 网络模型的方法。
③ HTTP模块(http)
该模块提供 HTTP 处理的核心功能和部分功能模块,HTTP 核心功能维护了 HTTP 多个阶段的工作流,并实现了对各种 HTTP 功能模块的管理和调用。
④ Mail模块(mail)
该模块实现邮件代理功能,代理 IMAP、POP3、SMTP 协议。
⑤ Stream模块(stream)
该模块提供 TCP/UDP 会话的代理和负载相关功能。
⑥ 第三方模块
nginx的框架设计就这么简单,一目了然。 nginx的框架设计就这么难,这一点点东西居然要撑起数万乃至数十万的并发。
晓得个框架设计明显是不够的,框架设计可以说是骨架,皮肉就是里面那些模块了,那这些骨架和皮肉又是怎么盘活的呢?
大概也就门清儿了,先学习进程模型、再进入几个核心模块看框架,最后再收了设计比较好的数据结构、内存池、缓冲区以及一些问题解决方案。
话说我该去处理一下我的source insight了,又过期了。