手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

Apache中多任务并发处理机制研究(1)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

if (lb_limit) {

memset(ap_scoreboard_image->balancers, 0, sizeof(lb_score) * lb_limit);

}

return OK;

}

公告板的创建与几个系统值密切相关的,比如server_limitthread_limitserver_limit描述了允许同时存在的进程的最大极限,包括父进程和子进程,每一个进程通常都是用上面的process_score数据结构进行描述;而thread_limit则是每一个子进程又允许生成的子线程的数目,这些子线程用worker_score进行描述。因此创建记分板的一个重要的步骤就是分配足够的插槽。由于Apache需要记录每一个进程以及进程中的每一个线程的运行信息,因此,创建记分板之前必须能够分配足够多的空间以容纳process_scoreworker_score结构。

正如前面描述,系统中允许存在server_limit个进程,它们中的每一个都必须在记分板中拥有一个插槽,因此我们至少必须分配sizeof(process_score)*server_limit大小的内存空间,同时使用ap_scoreboard_image->parent指向该空间。

同时对于server_limit个进程中的每一个进程,他们可能产生的线程数为thread_limit,这些线程也必须在记分板中拥有相应的插槽,为此共分配server_limit*sizeof(worker_score)*thread_limit的内存大小。

Apache按照最大化的原则进行分配,一旦分配完毕肯定能够保证需要。不过这样的话可能存在很多的空闲插槽。因为即使只有一个进程和一个线程存在,Apache也是会分配所有的内存的。

现在回到上面的代码中。如果是平稳启动,那么在创建新的记分板之前系统中应该已经存在一个旧的记分板(ap_scoreboard_image不为NULL)。在这种情况下,Apache首先得到当前记分板的家族号,同时重新设置启动时间。另外一个重要的任务就是清理初始化记分板上的数据,将其全部清零,彻底扫荡前一个家族的所有信息,并将其返回出去供使用。

ap_calc_scoreboard_size();

如果创建的时候发现公告板不存在,那么这意味着这是Apache启动以来的第一次记分板创建。因此创建之前必须计算记分板分配的空间大小。创建记分板的内存大小由函数ap_calc_scoreboard_size()函数完成:

AP_DECLARE(int) ap_calc_scoreboard_size(void)

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!