1、建立TCP连接
2、接受请求(linux内核从网卡接受请求后,检验端口号和主机名后,发给对应web进程)
3、处理请求(web服务进程)
4、获取资源(web进程通过内核将硬盘中的数据读入linux内核的内存空间,然后再复制到web进程的内存空间中)
5、构建响应(web软件构建响应报文)
6、回送响应(报文+资源)
7、记录日志
当用户请求一个网页内容时,其数据需要从网卡进入,经过tcp拆封装后,发现是送给监听在80端口的web进程时,然后给它。
web进程接受请求,发现是请求网站首页内容,于是向内核发起系统调用,要求进行I/O调取首页文件。
内核进行I/O后,将文件先放到内核内存,再复制到web进程内存,web进程再进行封装,然后再发送到内核的网络模块,最后才从网卡走掉。
这样响应数据从 “硬盘I/O”→“内核空间”→“web进程”→“内核空间网络模块”
多进程:
每个进程的内存地址空间都是独立的,这样从内核空间复制数据时I/O量比较大
由于进程切换的时候,需要保留进程的现场,再切换回去的时候需要回复现场。
所以不能启动过多进程
多线程:
线程共享进程的内存地址空间的资源,所以I/O量比较小。
如果对应的工作进程崩溃,那么其下所有的线程都会崩溃。
nginx的工作模式是有一个master主进程,和N个worker工作线程。
master主进程只复制读取配置、按需生成、回收worker工作线程。而worker线程只负责响应用户请求。
当nginx升级时只需要将二进制执行文件替换即可,当有新连接进来时,就会使用新的worker线程。而旧的连接依然会使用旧的worker线程,直到断开为止才会被回收。
时间: 2024-11-05 02:21:27