

Nginx 服务器,正常运行过程中:
外部的操作(信号)外部的操作的不同,通过信号管理 Worker核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。思考:

HTTP 连接建立和请求处理过程:
Nginx 高性能、高并发:
多进程 + 异步非阻塞方式(IO 多路复用 epoll)request:Nginx 中 http 请求。
基本的 HTTP Web Server 工作模式:
请求行和请求头,判断段有请求体后,读取请求体响应行、响应头、响应体)Nginx 也是这个套路,整体流程一致。


nginx的模块根据其功能基本上可以分为以下几种类型:
nginx vs. apache:
网络 IO 模型:
场景:
处理多个请求时,可以采用:
IO 多路复用或者阻塞 IO+多线程
一个 线程,跟踪多个 socket 状态,哪个就绪,就读写哪个;思考:IO 多路复用 和 多线程 的适用场景?
IO 多路复用:单个连接的请求处理速度没有优势,适合 IO 密集型 场景,事件驱动线程调度开销)长连接的情况(多线程模式长连接容易造成线程过多,造成频繁调度)阻塞IO + 多线程:实现简单,可以不依赖系统调用,适合 CPU 密集型 场景基础背景:
nofile):ulimit -nworker_connections 上限为 nofileworker_processes因此,Nginx 的最大连接数:
Worker 进程数量 x 单个 Worker 进程的最大连接数反向代理服务器时,能够服务的最大连接数:(Worker 进程数量 x 单个 Worker 进程的最大连接数)/ 2。Client 的连接和后端 Web Server 的连接,占用 2 个连接思考:
一个进程能够打开的 fd 数量有限制?method、uri、http versionhttp version、status code场景:
处理多个请求时,可以采用:
IO 多路复用或者阻塞 IO+多线程
一个 线程,跟踪多个 socket 状态,哪个就绪,就读写哪个;思考:IO 多路复用 和 多线程 的适用场景?
IO 多路复用:单个连接的请求处理速度没有优势线程调度开销)长连接的情况(多线程模式长连接容易造成线程过多,造成频繁调度)阻塞IO + 多线程:实现简单,可以不依赖系统调用。详细内容,参考:
select/poll 系统调用:
// select 系统调用int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); // poll 系统调用int poll(struct pollfd fds[], nfds_t nfds, int timeout);复制代码select:
就绪的 fd,可以设定一个超时时间,当有 fd (File descripter) 就绪或超时返回;位集合,大小是在编译内核时的常量,默认大小为 1024poll:
数组fd 数量过小的问题epoll: event 事件驱动
注册一个监听事件就绪时,将 fd 添加到就绪链表select,poll,epoll:
I/O多路复用的机制;I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。多个文件描述符同步I/O:用户进程负责读写(从内核空间拷贝到用户空间),读写过程中,用户进程是阻塞的;异步 IO,无需用户进程负责读写,异步IO,会负责从内核空间拷贝到用户空间;关于 Nginx 的并发处理能力:
关注微信公众号:松花皮蛋的黑板报,获取更多精彩!
公众号介绍:分享在京东工作的技术感悟,还有JAVA技术和业内最佳实践,大部分都是务实的、能看懂的、可复现的
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。