最近在设计一种网络服务器架构, 最重要的一点是把耗时操作委托给工作进程(或者线程)来做, 所以考察一下 fastcgi. 大概看了下 lighttpd 的 mod_fastcgi 的源码, 没想到立即被卡住了. 根据我的想法, PHP 等 fastcgi 程序(php-cgi 进程)监听网络, 然后 mod_fastcgi 只需要 connect 这些进程即可, 奇怪的是, 我竟然看到了 listen! -
fcgi_spawn_connection() 函数:
fcgi_fd = socket(socket_type, SOCK_STREAM, 0);
if (-1 == connect(fcgi_fd, fcgi_addr, servlen)) {
close(fcgi_fd);
fcgi_fd = socket(socket_type, SOCK_STREAM, 0);
/* create socket */
bind(fcgi_fd, fcgi_addr, servlen);
listen(fcgi_fd, 1024);
switch ((child = fork())) {
case 0: {
// child process
if(fcgi_fd != FCGI_LISTENSOCK_FILENO) {
close(FCGI_LISTENSOCK_FILENO);
dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
close(fcgi_fd);
}
/* exec the cgi */
execve(arg.ptr[0], arg.ptr, env.ptr);
exit(errno);
}
}
我很奇怪, mod_fastcgi 为什么要监听网络连接? 谁会连接它? 问了同事, 同事说可能是 fastcgi 进程要连接它, 可问题是 fastcgi 进程怎么知道连接什么地方, 更不用说, fastcgi 协议里没有提到要 fastcgi 进程主动连接 Web Server 一说.
Continue reading »
Written by ideawu
at 2010-08-29 18:00:51
百度公司作为业界领先的网络技术公司, 给员工提供了可观的薪水和具有挑战性的工作环境, 这吸引许多 IT 人士. 在 2007-2008 年, 百度的研发人员数量急剧扩张, 所以大学应届生进入百度的机率很大. 到现在, 百度的研发人员数量趋向饱和, 所以, 要加入百度的难道更大了.(更正一下, 多位百度的leader纷纷表示, 招聘缺口仍然很大!)
不过, 百度对技术人才的需求是无停止的. 在这里, 我要谈一谈应届生应聘百度成功的基本技术条件.
首先, 要有计算机思维, 理解计算机各个硬件的角色和作用, 具有程序逻辑思维能力. 一旦理解了计算机系统的本质, 又具有了程序逻辑思维能力, 所有的现存的公开的技术点都不是难题, 只是时间的问题.
Continue reading »
Written by ideawu
at 2010-08-28 13:29:45 | tags: 程序员
对于高负载的网络服务器, 瓶颈几乎总是在等待 IO, 而 CPU 的计算能力往往不是最先遇到的问题. 你的服务器程序, 接收客户端的请求, 可能还要连接另一台网络服务器, 一起合作处理客户端的请求. 很多情况下, 你无法把客户端的连接以及与另一台服务器的连接统一处理, 不可避免地要出现等待. 这时, 只能使用多进程或者多线程.
Master-Workers(管理者-工作者)模式是处理这种情况的主要方式, 只要有 IO 等待或者其它耗时的操作, 都交互若干个工作者之一处理, 这样, 后续的请求不会被阻塞, 从而实现高负载.
目录:
下文中有时用”进程”一词同时指代进程和线程, 它们的区别主要考虑的是通信方式.
Continue reading »
Written by ideawu
at 2010-08-22 16:03:57
最近一个 C/C++ 项目要用到 JSON, 所以选用了 json-c 库. C 语言不像 PHP/Python 等动态语言, 可以无缝地将 JSON 数据结构转为自身的数据结构, 所以操作起来会有些麻烦.
首先是数据结构. 在 json-c 里, 所有的 JSON 数据结构都是 json_object 类型, 然后这个 json_object 结构有一个 type 字段, 表明当前的对象是什么类型, 比如整数, 数组, 字符串等等. 没错, 大多数动态语言都是用类似的方法处理动态类型.
json-c 有自己的引用计数的内存管理机制, json_object_get() 函数用于手动地增加对象的引用计数, 相对地, json_object_put() 用于手动地减少引用计数. 要使用 json-c 必须非常明白每一个函数, 是否会增加或者减少对象的引用计数, 以避免内存泄露.
Continue reading »
Written by ideawu
at 2010-08-21 21:45:56
“因为TCP端口号是16位无符号整数, 最大65535, 所以一台服务器最多支持65536个TCP socket连接.” – 一个非常经典的误解! 即使是有多年网络编程经验的人, 也会持有这个错误结论.
要戳破这个错误结论, 可以从理论和实践两方面来.
理论
系统通过一个四元组来唯一标识一条TCP连接. 这个四元组的结构是{local ip, local port, remote ip, remote port}, 对于IPv4, 系统理论上最多可以管理2^(32+16+32+16), 2的96次方个连接. 如果不仅仅考虑TCP, 则是一个五元组, 加上协议号(TCP, UDP或者其它). Continue reading »
Written by ideawu
at 2010-07-16 16:44:50
中国的当代小说, 最缺少的是西方戏剧的那种艺术元素, 即使和”红楼梦”"儒林外史”, 甚至是”诗经”中的故事相比, 也能一眼看出俗不可耐. 所以, 中国不缺少优秀小说, 中国人也不是无法写优秀的小说.
古人就认为文艺作品要雅俗共赏, 但当代的小说只有”俗”, 以至于俗得去模仿录影机. 现实人物说的话一字不差的照抄(或者模仿得一字不差). 这种所谓追求”真”的做法, 完全丢弃了艺术的”幻”.
现在, 我要拿一段某中国作家的代表其最高水平的小说的开头, 来和莫泊桑的一部小说中的开头来比较. 该中国作家事实上无法和莫泊桑相提并论, 本文仅仅是两段文字的比较.
Continue reading »
Written by ideawu
at 2010-07-12 19:08:48
|
|
Recent Comments