专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
51好读  ›  专栏  ›  java那些事

Nginx:论高并发,在座各位都是渣渣

java那些事  · 公众号  · Java  · 2019-02-28 16:00

正文

请到「今天看啥」查看全文



NGINX是如何运作的呢?


NGINX利用一个预测进程模型调度可用的硬件资源:

  • 主进程处理配置文件读取、端口绑定等特权操作,以及创建一小组子进程(接下来三种类型的进程)

  • 启动时缓存加载器进程加载硬盘中缓存到内存中,接着退出。对它的调度是保守的,所以资源开销较低

  • 缓存管理进程定时运行,清理来自硬盘缓存的实体到指定的大小

  • 工作进程负责所有的工作,处理网络连接、硬盘读写操作、以及上游服务器通信

NGINX推荐的配置是,一个工作进程对应一个CPU内核,确保硬件资源的有效利用,在配置文件中设置worker_processes auto:



worker_processes auto;


一旦NGINX服务起来,仅有工作进程在忙,每个工作进程采用非阻塞地方式处理多个连接,降低上下文切换的次数。

每个工作进程都是单线程且独立运行,负责获取新连接并进行处理。进程之间通过共享内存进行通信,诸如缓存数据,会话持续化数据(ession persistence data),以及其他共享资源。NGINX1.7.11及以后的版本,有一个可选的线程池,工作进程将阻塞操作丢给它们。更多细节,参看《Nginx 引入线程池,提升 9 倍性能》(http://blog.jobbole.com/87988/)。对于NGINX Plus用户,这些新特性会在今年的发布版7中出现。


NGINX内部工作进程


每个NGINX工作进程由配置文件对其进行初始化,主进程为其提供一组监听socket。

工作进程起始于socket监听事件(accept_mutex 和 kernel socket sharding),事件由新的连接进行初始化,接着这些连接被派发给某个状态机—HTTP状态机是其中最常用的一种,不过NGINX也实现了基于流的状态机、基于通信协议的状态机(SMTP, IMAP, and POP3)。








请到「今天看啥」查看全文


推荐文章
上海交通广播  ·  八月,我们敬礼有声!
7 年前
程序员大咖  ·  国内的老程序员最后都去哪了?
7 年前