Nginx实现高并发及原理
1个回答
展开全部
1.nginx高并发原理( 多进程(单线程)+epoll 实现高并发)
1.Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程
2.每个子进程只有一个线程,采用的 IO多路复用模型epoll,实现高并发
1.epoll() 中内核则维护一个链表,epoll_wait 方法可以获取到链表长度,不为0就知道文件描述符准备好了
2.在内核实现中 epoll 是根据每个 sockfd 上面的与设备驱动程序建立起来的回调函数实现的
3.某个 sockfd 上的事件发生时,与它对应的回调函数就会被调用,来把这个 sockfd 加入链表,其他处于“空闲的”状态的则不会
4.epoll上面链表中获取文件描述,这里使用内存映射(mmap)技术, 避免了复制大量文件描述符带来的开销
内存映射(mmap):内存映射文件,是由一个文件到一块内存的映射,将不必再对文件执行I/O操作
(1)nginx相对于apache的优点
1.轻量级,同样起web 服务,比apache 占用更少的内存及资源
2.抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
3.高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速啊
(2)apache相对于nginx的优点
1.apache 更为成熟,少 bug ,稳定性好
2.rewrite ,比nginx 的rewrite 强大
3.模块超多,基本想到的都可以找到
1.Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程
2.每个子进程只有一个线程,采用的 IO多路复用模型epoll,实现高并发
1.epoll() 中内核则维护一个链表,epoll_wait 方法可以获取到链表长度,不为0就知道文件描述符准备好了
2.在内核实现中 epoll 是根据每个 sockfd 上面的与设备驱动程序建立起来的回调函数实现的
3.某个 sockfd 上的事件发生时,与它对应的回调函数就会被调用,来把这个 sockfd 加入链表,其他处于“空闲的”状态的则不会
4.epoll上面链表中获取文件描述,这里使用内存映射(mmap)技术, 避免了复制大量文件描述符带来的开销
内存映射(mmap):内存映射文件,是由一个文件到一块内存的映射,将不必再对文件执行I/O操作
(1)nginx相对于apache的优点
1.轻量级,同样起web 服务,比apache 占用更少的内存及资源
2.抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
3.高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速啊
(2)apache相对于nginx的优点
1.apache 更为成熟,少 bug ,稳定性好
2.rewrite ,比nginx 的rewrite 强大
3.模块超多,基本想到的都可以找到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询