随笔分类 -  源代码

nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块
摘要:上一节我们讲到了事件驱动的模块,它把我们引入epoll模块,今天我们主要学习下nginx如何使用epoll完成时间驱动,实现高并发;这里不详细讲解epoll原理,如果有机会再做一次单独的epoll的学习。本文来自于:http://blog.csdn.net/lengzijian回忆一下上一节的内容,在我们讲到ngx_process_events_and_timers时,在源码最后提到了ngx_process_events,这里是把我们引入epoll的入口:1.先来看下ngx_process_events的宏定义:src/event/ngx_event.h #define ngx_proces. 阅读全文

posted @ 2012-05-28 14:15 h2内存数据库 阅读(747) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
摘要:首先继续回忆下,之前子线程执行操作里面有一个未涉及的内容ngx_process_events_and_timers,今天我们就来研究下这个函数。本篇文章来自于:http://blog.csdn.net/lengzijian/article/details/7601730先来看一下第十九节的部分截图:今天主要讲解的就是事件驱动函数,图中的红色部分:src/event/ngx_event.c void ngx_process_events_and_timers(ngx_cycle_t *cycle) { ngx_uint_t flags; ngx_msec_t timer, ... 阅读全文

posted @ 2012-05-25 16:25 h2内存数据库 阅读(2500) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(二十)—— event 模块(一) ——初始化
摘要:读完之前的学习笔记,相信已经对nginx的启动流程有了一定的认识,从这一节起我们想深入各个模块,学习各个模块的内的主要操作。本文来自于:http://blog.csdn.net/lengzijian/article/details/7598996今天我们就来学习下event模块,在之前的启动里多次提到了调用各个模块的钩子函数,我们先来回忆一下关于event模块钩子函数的执行,也是event模块启动的步骤:1.创建conf(creat_conf):ngx_event_create_conf()该方法,主要是创建了一个ngx_event_conf_t结构体,并且分配内存空间。2.读取配置文件:例如 阅读全文

posted @ 2012-05-25 12:03 h2内存数据库 阅读(1596) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十九)—— nginx启动过程函数调用图
摘要:学了很久的nginx启动流程,今天决定复习下以前所学的知识,画一个函数调用图,一边之后快速阅读代码。希望对大家有用,由于我的博文被大量网站抓取而且不标注来源,所以决定在图上加上水印,希望各位同学不要喷我。该文章来自:http://blog.csdn.net/lengzijian/article/details/7597852另外:因为不知道大家看的效果怎么样如果需要原图也可以联系我,或者留下邮箱。 阅读全文

posted @ 2012-05-24 12:13 h2内存数据库 阅读(208) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十八)—— ngx_add_inherited_sockets 继承的sockets
摘要:之前几节有讲过多进程的创建过程和子进程所处理的事情,今天要讲一下nginx里面main函数的另一个主要的操作ngx_add_inherited_sockets。ngx_add_inherited_sockets:服务器监听套接字的封装。本文的主要灵感来自:http://blog.csdn.net/livelylittlefish/article/details/7277607,感谢作者分享。在ngx_add_inherited_sockets方法内,有一个重要的结构体需要讲解——ngx_listening_ssrc/core/ngx_connection.h typedef struct ng 阅读全文

posted @ 2012-05-23 14:31 h2内存数据库 阅读(2179) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十七)—— ngx_worker_process_cycle子进程执行
摘要:上一节主要讲解主进程如何开启子进程,并且讲解了主进程做的一些操作,这一节主要学习子进程处理函数ngx_worker_process_cyclesrc/os/unix/ngx_process_cycle.c static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) { ngx_uint_t i; ngx_connection_t *c; //在master中,ngx_process被设置为NGX_PROCESS_MASTER ngx_process = N... 阅读全文

posted @ 2012-05-22 16:08 h2内存数据库 阅读(1573) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十六)—— ngx_start_worker_processes子进程创建
摘要:上一节,我们主要讲了多进程时,主进程如何利用信号量控制子进程的,这一节我们主要讲解下子进程的启动,和执行的操作。上一节讲过,真正创建worker子进程的函数是ngx_start_worker_processes,这个函数本身很简单:src/os/unix/ngx_process_cycle.c static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type) { ngx_int_t i; ngx_channel_t ch; ngx_log_err... 阅读全文

posted @ 2012-05-22 14:38 h2内存数据库 阅读(816) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程(一)
摘要:了解core模块之前还应改学习ngx_start_worker_processes函数,今天我就来详细学一下这个方法,主要内容来自于http://blog.sina.com.cn/s/blog_677be95b0100iivk.html。nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(单进程是通过ngx_single_process_cycle完成,这里只分析多进程的情况),在ngx_master_process_cycle中,会根据配置文件的worker_processes值创建多个子进程 阅读全文

posted @ 2012-05-21 18:03 h2内存数据库 阅读(1996) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十四)—— 全局变量ngx_cycle
摘要:再打算正式开始研究core模块式,发现有一个很重要的变量ngx_cycle_t,一直伴随,如果不懂ngx_cycle可能读起代码来回非常困难,这里就来详细学习一下吧。本文大部分灵感来自于。http://blog.csdn.net/livelylittlefish/article/details/7247080和http://blog.sina.com.cn/s/blog_677be95b0100iivi.html谢谢作者提供很详细的资料。依照惯例我们直接来看下/src/core/ngx_cycle.h struct ngx_cycle_s { void ... 阅读全文

posted @ 2012-05-21 15:16 h2内存数据库 阅读(682) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十二)——基本容器——ngx_buf
摘要:ngx_buf.{c|h}分为两种类型,一种是file,一种是memory。因此这里会有文件的一些操作域。typedef void * ngx_buf_tag_t; typedef struct ngx_buf_s ngx_buf_t; struct ngx_buf_s { u_char *pos; //已经执行的数据位置 u_char *last; //使用的内存的最后一个字节的指针 off_t file_pos; ... 阅读全文

posted @ 2012-03-15 16:51 h2内存数据库 阅读(720) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十一)——基本容器——ngx_list
摘要:ngx_list.{c|h}结构非常简单,如果你看过之前的array介绍,这一节可以一带而过:typedef struct ngx_list_part_s ngx_list_part_t; struct ngx_list_part_s { void *elts; //数据区域指针 ngx_uint_t nelts; //数据实际个数 ngx_list_part_t *next; //下一个数据指针 }; typedef struct { ngx_list_pa... 阅读全文

posted @ 2012-03-15 16:47 h2内存数据库 阅读(337) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(十)——基本容器——ngx_hash
摘要:ngx_hash.{c|h}实现了nginx里面比较重要的一个hash结构,这个在模块配置解析里经常被用到。该hash结构是只读的,仅在初始创建时可以给出保存在其中的key-val对儿,然后就只能进行“增删改查”操作了。先来看一下hash结构的内存布局:typedef struct { ngx_hash_t *hash; //指向待初始化的散列结构 ngx_hash_key_pt key; //为计算散列值用的函数指针 ngx_uint_t max_size; ... 阅读全文

posted @ 2012-03-15 16:43 h2内存数据库 阅读(373) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(九)——基本容器——queue
摘要:src/core/ngx_queue.{c|h}实现了一个队列的操作逻辑,队列的基本结构为一个双向队列基础数据结构为:typedef struct ngx_queue_s ngx_queue_t; struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next; }; 根据数据结构可以发现,nginx的队列操作和结构只进行指针操作,不负责节点内容空间的分配和保存,所以在定义自己的队列节点的时候,需要自己定义数据结构以及分配空间,并包含一个ngx_queue_t类型的成员,需要获得原始的数据节点的时候,需要使用ngx_q... 阅读全文

posted @ 2012-03-15 16:39 h2内存数据库 阅读(411) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(八)——基本容器——array数组
摘要:对应文件为core/ngx_array.{c|h}ngx_array是nginx内部封装的,使用ngx_pool_t对内存池进行分配的数组容器,其中的数据是在一整片内存区中连续存放的。更新数据时只能在尾部压入1个或多个元素。这里单纯的觉得和数组没有差别。数组的实现结构为:struct ngx_array_s { void *elts; //具体的数据区域的指针 ngx_uint_t nelts; //数组实际包含的元素数量 size_t size; //数组单个元素的大小 ngx_uint_t nalloc; ... 阅读全文

posted @ 2012-03-15 16:34 h2内存数据库 阅读(298) 评论(0) 推荐(0) 编辑

nginx 源码学习笔记(七)——内存分配相关源码分析
摘要:内存分配相关1.系统功能封装内存相关的操作主要在os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c}中。其中os/unix/ngx_alloc.{h,c}封装了最基本的内存分配函数,是对c原有的malloc/free/memalign等函数的封装,对应函数为:a.ngx_alloc:对malloc进行了简单的封装;void * ngx_alloc(size_t size, ngx_log_t *log) { void *p; p = malloc(size); if (p == NULL) { ngx_log_... 阅读全文

posted @ 2012-03-15 14:06 h2内存数据库 阅读(344) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示