04 29, 2008 :: 书签

accept Serialization - multiple sockets

这里要说的是 Unix socket API 的一个缺点。假设web服务器使用了多个Listen语句监听多个端口或者多个地址,Apache会使用select()以检测每个socket是否就绪。select()会表明一个socket有至少一个连接正等候处理。由于Apache的模型是多子进程的,所有空闲进程会同时检测新的连接。一个很天真的实现方法是这样的(这些例子并不是源代码,只是为了说明问题而已):

for (;;) {
for (;;) {
fd_set accept_fds;

FD_ZERO (&accept_fds);
for (i = first_socket; i <= last_socket; ++i) {
FD_SET (i, &accept_fds);
}
rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
if (rc < 1) continue;
new_connection = -1;
for (i = first_socket; i <= last_socket; ++i) {
if (FD_ISSET (i, &accept_fds)) {
new_connection = accept (i, NULL, NULL);
if (new_connection != -1) break;
}
}
if (new_connection != -1) break;
}
process the new_connection;
}

这种天真的实现方法有一个严重的"饥饿"问题。如果多个子进程同时执行这个循环,则在多个请求之间,进程会被阻塞在select ,随即进入循环并试图accept此连接,但是只有一个进程可以成功执行(假设还有一个连接就绪),而其余的则会被阻塞accept 。这样,只有那一个socket可以处理请求,而其他都被锁住了,直到有足够多的请求将它们唤醒。此"饥饿"问题在PR#467中有专门的讲述。目前至少有两种解决方案。

一种方案是使用非阻塞型socket ,不阻塞子进程并允许它们立即继续执行。但是这样会浪费CPU时间。设想一下,select有10个子进程,当一个请求到达的时候,其中9个被唤醒,并试图accept此连接,继而进入select循环,无所事事,并且其间没有一个子进程能够响应出现在其他socket上的请求,直到退出select循环。总之,这个方案效率并不怎么高,除非你有很多的CPU,而且开了很多子进程。

另一种也是Apache所使用的方案是,使内层循环的入口串行化,形如(不同之处以高亮显示):

Continue reading "accept Serialization - multiple sockets"

Posted by cyril at 5:50 PM | Comments (0) | TrackBack (0)

最近想看的书

正在看或看过的书

我的日程



03 27, 2008 :: 书签

《Nature Medicine》:治疗性克隆能改善鼠帕金森氏症

据最新一期英国《自然—医学》(Nature Medicine)杂志网络版报道,美国斯隆—凯特林癌症研究所研究人员用治疗性克隆技术治疗实验鼠帕金森氏症获得成功。

报道说,研究人员给患帕金森氏症的实验鼠移植了由其自身皮肤细胞克隆产生的神经细胞,后者能产生神经传导物质多巴胺,结果实验鼠的病情出现明显改善。帕金森氏症是一种神经疾病,主要病因是脑中的多巴胺分泌量不足。

研究人员称,这种利用治疗性克隆技术治疗帕金森氏症的疗法前景看好,因为移植的神经细胞来自实验鼠自身,不会被实验鼠的免疫系统排斥。

治疗性克隆即利用克隆技术获取人类早期胚胎,但目的不是将胚胎培育成人,而是为了提取全能型胚胎干细胞,然后在合适的条件下,使其发育成为所需的细胞甚至器官,用于治疗人类疾病。

Continue reading "《Nature Medicine》:治疗性克隆能改善鼠帕金森氏症" »

国产脑起搏器

清华研究团队用载人航天科技和精神做中国的“脑起搏器”

  【新闻中心讯 记者 周襄楠 摄影郭海军】中国的帕金森病患者和癫痫患者有望在不久的将来用上中国自己研发的“脑起搏器”,从而对疾病达到持久和全面的治疗。将“脑起搏器”中由4个芝麻大小的电极组成的电极束植入人的脑部,并发出脉冲,刺激神经从而达到治疗帕金森病和癫痫等脑部神经疾病的效果。而这种价格低廉、技术过硬的“脑起搏器”是由清华大学的科研团队运用载人航天技术研制的。

一些进展可以参看:清华大学航天航空学院人机与环境工程研究所的植入式神经刺激研究

Continue reading "国产脑起搏器" »

10 25, 2007 :: 书签

无法访问flickr?

firefox插件:

https://addons.mozilla.org/en-US/firefox/addon/4286

更多资料:
http://blog.istef.info/2007/06/08/save-flickr/

10 24, 2007 :: 书签

卡格博

项目进行了一段时间了,迟迟没有合适的名字,今天安排了好任务,队长提议,大家终于有时间讨论项目名称了。

黑板上都是大家能够想到,实在不行只得搜索,看看是否有合适,从武侠到古典,从历史典故到神话传说,古今中外。最后不知道怎么讨论到了西藏,很快不少雪峰,地方,都从喜好旅游的几个同事那儿蹦了出来。

梅里雪山凸现出来,卡格博更是没有人类的所谓征服,汉语拼音缩写更是拉风:

KGB = ......

没有什么好说的了,大家很快便一致,前后不过几分钟,而且很是满意。

关于卡格博的资料:

Continue reading "卡格博" »