日期:2014-05-16  浏览次数:20689 次

请问,现在程序还有fork多个进程协同工作的吗?
我有几个疑问:
1.程序fork多进程是否还有使用价值.
  1).数据安全性要求不高,一般用共享内存的多线程就能很好工作,开发效率高效.
  2).数据安全性要求较高,一般划分为不同进程.不同进程通过socket进行数据传输,方便以后跨网布置.
  3).多进程之间的内存共享效率应该是最高的,但同时还需求一套同步机制...
2.多进程之间同步
  1).POSIX信号量,程序启动或者其它中断原因,可能会导致死锁问题.(sem_unlink现在已经改为调用立即删除了)
  2).文件锁.很早以前了解过这个东东.在尝试过POSIX信号量失败后,可能会把文件锁作为进程间同步工具.

主要是最近设计项目框架时,按照安全性级别,划分为几个程序,程序间通过socket交换数据.每个程序功能不大,所以产生一个想法,就是主进程fork多个进程并监控子里程运行,每个子进程完成独立的功能,通过共享内存交换数据..
有没有前辈有这方面的经验,给点提示,或者大家交流下.
------解决方案--------------------
fork 多个进程协同工作,还是很普遍的
------解决方案--------------------
说的很玄乎的样子,其实都是基础开发能力,每个linux开发人员都应该很熟练的理解并运用。

任何服务都要看需求考虑架构设计,master-worker的工作模型太普遍了,都没什么意思了,多线程模型也没难度,技术方案都千篇一律,楼主知道的太少了。
------解决方案--------------------
google
《unix 进程通讯》  W.richard Steven

网上资料很多,ipc效率最高的应当是共享内存方式,可以看看这种方式。
------解决方案--------------------
用多线程不就好了啊
------解决方案--------------------
linux 实现的话 一个pthread 就相当于fork个进程,多线程实际就是多进程吧 
------解决方案--------------------
用openmp和mpi配合更好
------解决方案--------------------
apache的架构本身就这样, 父进程负责子进程管理, 父子进程与子进程之间使用同一块匿名共享内存记录一些全局数据, 需要shared pthread_mutex_t 同步共享内存区的操作.

其他就没什么了, 父子进程需要交互一些信息使用管道或者sockpair, 自己规定就好.