`
bollaxu
  • 浏览: 219504 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
  struct sigaction{ void (*sa_handler)(int); //在调用前加入信号屏蔽字,仅当信号捕捉函数返回时再将进程的信号屏蔽字复位为原先值*/ sigset_t sa_mask; //Signal options int flags; //结构中还有一个参数,不懂。 }     #include <stdio.h> #include <signal.h> #include <unistd.h> void show_handler(int sig) { printf( ...
宏中"#"和"##"的用法   一、一般用法  我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.  用法: #include<cstdio> #include<climits> using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输出字符串"vck" ...
server {} block里面的"listen"指令调用了ngx_http_core_listen()函数   ngx_http_core_listen(...) { ngx_http_core_srv_conf_t *cscf = conf; ngx_http_listen_opt_t lsopt; /*根据配置的参数设置lsopt*/ //... ngx_http_add_listen(cf, cscf, &lsopt); } ...
硬盘一次读写的时间由两个部分组成: time = latency + data_size / bandwidth   latency主要由平均硬盘寻道时间和平均硬盘转动延迟组成。硬盘有多个磁盘片组成,每个磁盘又由N个同心的track构成,每个track又分成M个sector。磁头移动到目标track,就是寻道的时间(seek time)。那硬盘转动延迟(rotational delay)取决于硬盘转速,即如果硬盘转速为7200rpm(每分钟7200转),那每转一圈就要1/120=8.3ms,平均延迟就是它的一般,大概是4.17ms。一般的硬盘平均寻道时间是8ms,那么latency就是8+ ...
Nginx因其出色的处理并发连接的能力,越来越多地作为一个反向代理服务器被使用。所谓反向代理,即把Nginx置于用户接入的最前端,监听用户发来的请求,并把它们转发给相应的后端服务器来处理具体的请求。后端服务器可以是缓存服务器(如Squid)或是处理动态/静态请求的服务器(如apache/Nginx/lighttpd),在这里不作深入讨论。本文对Nginx在upstream服务器的设置和"proxy_pass"的功能在代码层面进行分析,并讨论在实际生产环境的出现的问题。 upstream模块主要有两个命令,"upstream"和"serv ...
  Nginx在7层负载交换、反向代理服务领域使用比较广泛。Nginx的结构也比较简单,除了底层几个核心的模块(如ngx_core_module,ngx_event_core_module,ngx_errlog_module等)之外,其它的主要是基于上述核心模块的http和mail的模块组,负责处理相关服务。而这些模块也可以在编译的时候被enable/disable,取决于对实际功能的需求。在这里,我来分析一下Nginx用的最多的功能,即处理http请求的工作流程。 在事件处理的分析中,提到过当有http请求过来时事件的触发和处理过程。我们知道,在一个子进程accept()请求之后,会调 ...
事件处理是Nginx处理请求的核心,每个子进程在ngx_worker_process_cycle()的循环里不断调用ngx_process_events_and_timers()函数来处理各种事件。下面,分析使用epoll机制下(Linux最常用支持大并发的事件触发机制)Nginx事件处理的过程,用源代码分析和debug信息追踪两种方法。 我们从ngx_worker_process_cycle()函数(即工作进程处理请求的循环)切入: static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) { ...
根据Nginx(0.7.67版本)的代码,对Nginx基本的进程创建,进程主体以及事件处理进行了简要的分析。 基本上,父进程(即主进程)一开始会初始化及读取配置,并加载各模块的功能,然后fork()出N个子进程(即工作进程),具有相同的工作逻辑和功能。父进程负责监听信号(如HUP,QUIT等),通过socket pair把信号传递给子进程(子进程间一般不通信)。子进程通过事件来处理父进程传递的信号。因为每个子进程都共享服务监听端口(如http 80),当用户发送请求时,会触发子进程的事件调用函数。因此在accept()请求的时候,需要用到mutex,保证只有一个工作进程接受并处理请求。 ...
Global site tag (gtag.js) - Google Analytics