nginx实现原理及pic架构感悟李志涛.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
nginx实现原理及pic架构感悟李志涛

@58李志涛 QQ:309921583 技术中心 - 架构部 目录 socket网络架构分析 源码结构 重要概念与基础设施 事件驱动架构 HTTP处理流程 pic实现以及性能优化 网络模型 Reactor模型 Reactor模式是处理并发I/O比较常见的一种模式,中心思想就是,将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(区别在于多路复用器是边沿触发还是水平触发),多路复用器返回并将相应I/O事件分发到对应的处理器中。 这里有三个重要的组件: 多路复用器:由操作系统提供,在linux上一般是select, poll, epoll等系统调用。 事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中。 事件处理器:负责处理特定事件的处理函数。 网络模型第一种 网络模型第二种 该模型在处理器链部分采用了多线程(线程池),也是后端程序常用的模型 网络模型 mina memcached ace 网络模型第三种 网络模型第三种 网络模型举例 netty 网络模型第四种 多进程全异步事件驱动模型 同步和异步 同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制.也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者 网络模型第四种总架构图 讨论 四种网络模型适用场景。 目录 socket网络架构分析 源码结构 重要概念与基础设施 事件驱动架构 HTTP处理流程 pic实现以及性能优化 NGINX源码结构 代码量 大约12左右万行C代码 源代码目录结构 core (主干和基础设置) event (事件驱动模型和不同的IO复用模块) http (HTTP服务器和模块) mail (邮件代理服务器和模块) os (操作系统相关的实现) misc (杂项) NGINX架构特点 非阻塞,全异步模式。 事件驱动. 单线程IO复用 一个主进程和少量工作进程 高度模块化 内存池 作用 简化内存管理 避免内存碎片 避免内存泄露 分类 生命周期 全局 连接 请求 大小 目录 socket网络架构分析 源码结构 重要概念与基础设施 事件驱动架构 HTTP处理流程 pic实现以及性能优化 nginx字符串处理-ngx_str_t Nginx 源码分析-- ngx_string 的一些简单分析 typedef struct { size_t len; u_char *data; } ngx_str_t; #define ngx_string(str) { sizeof(str) - 1, (u_char *) str } 比较明显的可以看出,ngx_str_t 只是将字符串添加了一个标志长度的字段,并无其他特殊结构。 内存池 typedef struct { u_char *last; //当前内存池分配到此处,即下一次分配从此处开始 u_char *end; //内存池结束位置 ngx_pool_t *next; //内存池里面有很多块内存,这些内存块就是通过该指针连成链表的 ngx_uint_t failed; //内存池分配失败次数 } ngx_pool_data_t; //内存池的数据块位置信息 ngx_pool_s结构 struct ngx_pool_s{ //内存池头部结构 ngx_pool_data_t d; //内存池的数据块 size_t max; //内存池数据块的最大值 ngx_pool_t *current; //指向当前内存池 ngx_chain_t *chain; //该指针挂接一个ngx_chain_t结构 ngx_pool_large_t *large; //大块内存链表,即分配空间超过max的内存 ngx_pool_cleanup_t *cleanup; //释放内存池的callback ngx_log_t *log; //日志信息 }; ngx_pool_large_s结构 struct ngx_pool_large_s{ ngx_pool_large_t *next; //指向下一块大块内存 void *alloc; //指向分配的大块内存 }; ngx_pool_t

文档评论(0)

wannian118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档