Chinaunix首页 | 论坛 | 博客
  • 博客访问: 827250
  • 博文数量: 168
  • 博客积分: 5431
  • 博客等级: 大校
  • 技术积分: 1560
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-22 11:56
文章存档

2015年(2)

2014年(1)

2013年(12)

2012年(12)

2011年(15)

2010年(5)

2009年(16)

2008年(41)

2007年(64)

分类: LINUX

2007-11-16 11:51:20

关于将任务全部在父进程里面实现还是选择fork一个子进程的思考

    我们知道OS是通过进程来完成kernel外的大部分工作的,我么是选择单个进程还是多个进程呢?这个问题对于应用程序的开发具有很重要的意义。以下是我在工作中总结的一点这个方面的知识。

    尽量选择单进程的形式来完成任务。原因很简单,单进程不需要进程间的通信大大降低系统负担以及进程切换的开销,而对于开发人员可以减少,对代码的分割等纷繁复杂的事情的考虑。但是单进程存在以下问题:
    不管是否多线程,代码是“串行”执行的,也就是说,你的function没有办法独立的工作,这能一个做完再做另外的一个。如果前一个出了问题,那么后一个将不能正常执行,这种程序容易“一个完蛋,整个进程完蛋“。对于程序的稳定性,可靠性,都是极大的缺陷。这对于PC程序而言是致命的。通过以上的问题我们可以得出一个简单的原则:
    如果任务的代码彼此之间联系紧密,不可以或者不应该“独立执行”的情况下,应该放在一个进程内部。这样,即便整个进程因为一个function出了问题也是可以理解的,毕竟它们之间联系紧密,”多米诺“就”多米诺“吧,就像,同事丢了你们合作的一个项目而不是别的同事丢了与你无关的项目的影响一样的。该分离的就应该就应该分离,无关的应该让它们分开。

    多进程的选择。
    一般而言,我们在创建进程的时候要选择一个”恰当“的时候。原因在于子进程会默认继承父进程的资源,这样如果父进程已经有很大的进程上下文的情况下会给系统造成极大的性能损失,即便使用一种叫做vfork的方式也不能完全避免性能的损失。所以,产生子进程的时候必须是”真的需要“而且时机要恰当。子进程中的工作应该具有很高的独立性,不能过多的与父进程有联系,最多是父进程关心自己的执行结果而已。

    多进程要处理好,父子之间的关系。尤其是僵尸的问题。
阅读(1182) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~