首页 > *nix技术, nginx, 源码分析 > 获取系统当前可用CPU核数

获取系统当前可用CPU核数

2012年11月18日 发表评论 阅读评论 6,166 次浏览

Nginx 1.3.8中有一处更新为允许给指令worker_processes设置auto参数,这将表示工程进程数将与当前系统可用CPU核数一致,挺方便实用的特性,看其具体实现。
首先是指令worker_processes的相关代码:

    { ngx_string("worker_processes"),
      NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
      ngx_set_worker_processes,
      0,
      0,
      NULL },

直接关注其回调处理函数ngx_set_worker_processes():

static char *
ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
...
    if (ngx_strcmp(value[1].data, "auto") == 0) {
        ccf->worker_processes = ngx_ncpu;
        return NGX_CONF_OK;
    }
...

可用看到,如果参数为auto,那么重点也就是全局变量ngx_ncpu,而它的值来之这里(在Linux环境下):

ngx_int_t
ngx_os_init(ngx_log_t *log)
{
...
#if (NGX_HAVE_SC_NPROCESSORS_ONLN)
    if (ngx_ncpu == 0) {
        ngx_ncpu = sysconf(_SC_NPROCESSORS_ONLN);
    }
#endif

    if (ngx_ncpu < 1) {
        ngx_ncpu = 1;
    }
...

通过查看sysconf的Man手册:http://linux.die.net/man/3/sysconf,其中_SC_NPROCESSORS_ONLN即表示当前可用的CPU核数:
_SC_NPROCESSORS_ONLN
The number of processors currently online (available).

当然,如果函数sysconf()执行失败而返回-1,那么接下来的两行代码将设置ngx_ncpu为1。

转载请保留地址:http://www.lenky.info/archives/2012/11/2032http://lenky.info/?p=2032


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

分类: *nix技术, nginx, 源码分析 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.