标签归档:fork

RSS feed of fork

最后更新于 .

今天发文比较多,哈,实在是觉得知识就该及时沉淀下来,时间长了难免记忆会模糊。 OK,直接切入正题,之前http://t.vimer.cn上提过正在开发的fuload压力测试框架,由于是想拿python做胶水语言,所以不可避免的涉及到了进程间通信的问题。 简单来说就是,一个python写的主进程与多个c写的处理进程通信的问题。主进程启动之后,会启动多个c的处理进程,主进程会对处理进程发送数据,并控制处理进程。 这种情况在server的编写中比较常见,为了解耦一般会将接受数据的进程与处理进程分开,在c中的实现一般是主进程先fork出子进程,然后在子进程中调用exec将自身替换为处理进程,进程id不变。这样主进程即可拿到所有的子进程id进行统一管理。 python当然也可以通过这种方式来实现,fork+execv即可完美重现,但是这可是无所不能的python呀,是否有更好的方式呢? 有的!python2.4之后引入了subprocess模块,通过它,我们将不再需要繁琐的调用fork,execv等,其主要函数如下:

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn ...

最后更新于 .

写了一个简单的多进程的框架,其实很简单但是意义却不仅在于此。
一.网上弄够编译通过的这种代码几乎=0,都是象征性的贴几段代码,直接拿下来,编都编译不过。
二.近期打算写一个基于epoll网络模型的服务器框架,前端网络接入全部由框架完成,而收到包之后的业务逻辑交给业务自己完成,这里的业务逻辑的进程数是可以动态调整的,所以用到了fork进程的概念(因为线程对代码编写要求太高)

好了代码如下(在文章末尾会直接放出代码下载,在suse linux 10下编译通过):

 /*==============================================
#
#   Author:            dantezhu – zny2008@gmail.com
#
#   QQ :                327775604
#
#   Last modified:  2009-11-05 19:30
#
#   Filename:        forkwork_use.cpp
#
#   Description:    多进程的一个框架,大家可以直接使用,已经经过功能测试和压力测试。
#                        编译:g++ forkwork_use.cpp -o forkwork_use 
#                        (实际上看过我写的 VIM-一键编译单个源文件 的话,直接按下F5就行了)
#
================================================*/
#include <iostream>
#include <pthread.h>
#include ...