一、Nginx 如何实现高并发?
1、什么叫做并发,什么叫做并行?
举例:
现有搬砖和砍柴两件事情,只有你一个人,搬砖砍柴各 10min;
可以先去搬砖,搬完后再去砍柴;或者将搬砖和砍柴两个任务划分开,搬一会砖,砍一会柴,只要换的够快,就是砖也搬了,柴也砍了,这种叫做批处理。
类比到计算机,把电脑当作人,进程(或线程,都一样)当作搬砖砍柴,共需 20min
!多个任务在一个核心上交替去运行,这个叫做并发。
若是两个小伙伴,一个砍柴,一个搬砖,那么这两个任务是真正意义上的同时运行了,这种叫做并行,只需 10min。
高并发(交替快,非阻塞):让交替的过程怎么达到更快(越快效率越高),但这个过程会受到阻塞的影响(阻塞、非阻塞,同步和异步)。
阻塞: 某些进程的运行需要等待或受其他进程影响。
非阻塞:某些进程的运行不需要等待或受其他进程影响。
同步:进程和进程之间具有依赖性一件事情需要等待另一件事情的完成,但与阻塞不同(如:做饭->吃饭)。
异步:进程和进程之间相互独立(eg:发消息,一方需要等另一方回复)。
2、Nginx进程结构:
master(监听)--->worker(响应)
Apache:来一个请求--->就直接分配一个线程【多进程/多线程(线程效率高只是相对于进程而言,而不是对于整体的架构)】
3、事件驱动或I/O多路复用
sellect/poll/epoll
4、epoll 事件驱动
底层优化内存管理
采用内存池,避免频繁分存与释放
5、资源缓存------>加快响应速度
6、负载均衡+反向代理 (Apache也可以实现,但Nginx更好)
二、Apache VS Nginx
功能:Nginx强
静态文件:Nginx强
动态文件:Apache强
性能:Nginx > Apache