前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx代码阅读第一天

nginx代码阅读第一天

作者头像
程序员小王
发布2019-03-08 10:46:28
8550
发布2019-03-08 10:46:28
举报
文章被收录于专栏:架构说架构说

1.代码注释

https://github.com/wangcy6/nginx_1.9.2

2.文档注释

https://www.kancloud.cn/digest/understandingnginx

http://tengine.taobao.org/book/

day1 Nginx 启动过程 begin

请思考一个问题 为什么说 nginx是异步非阻塞的,epoll明明是同步非阻塞,这是nginx做了优化?

nginx接收一个请求后,不会等待这个请求的文件读取操作完成之后才接收下一个请求,它不会等待这个请求的后续的处理结果。而是会马上循环处理下一个请求(不阻塞)。请求的程序文件执行完成之后,会主动通知该线程,不用你主动去等待或者轮询查看(异步)。最后返回给客户端,它们是用回调这种方式进行 I/O,所以称为异步。 这个方式符合异步定义 看来异步实现方式很多种 单机支持10万以上的并发连接

进程模型

代码位置:

src\os\unix\ngx_process_cycle.c

psatck nginx: master proces

#0 0x00007fe7561431a3 in __epoll_wait_nocancel () from /lib64/libc.so.6 #1 0x0000000000431a6f in ngx_epoll_process_events () #2 0x0000000000429772 in ngx_process_events_and_timers () #3 0x000000000042fff9 in ngx_worker_process_cycle () #4 0x000000000042e846 in ngx_spawn_process () #5 0x000000000042f3bb in ngx_start_worker_processes () #6 0x00000000004306f6 in ngx_master_process_cycle () #7 0x000000000040c785 in main ()

psatck nginx: worker process

#0 0x00007fe75608c81a in sigsuspend () from /lib64/libc.so.6 #1 0x00000000004307f5 in ngx_master_process_cycle () #2 0x000000000040c785 in main ()

day1 输出 end

  • nginx使用了三种消息传递方式:共享内存、socketpair、信号。
  • Nginx主要使用了三种同步方式:原子操作、信号量、文件锁

原子操作:ngx_spinlock方法是非常高效的自旋锁, 它充分考虑了单处理器和多处理器的系统,对于持有锁时间非常短的场景很有效率s

进程间通信机制

master进程与worker进程间

worker进程之间


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.代码注释
  • 2.文档注释
  • day1 Nginx 启动过程 begin
    • 请思考一个问题 为什么说 nginx是异步非阻塞的,epoll明明是同步非阻塞,这是nginx做了优化?
      • 代码位置:
        • psatck nginx: master proces
          • psatck nginx: worker process
            • day1 输出 end
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档