LoveUnix » 编程开发 & Rational » 向大家请教,进程和线程的使用
让LU留住您的每

一天 让LU博客留住您的每一天
2004-3-30 23:38 kant
在本论坛中,常有人提到进程和线程,而且多任务系统是比较常见的方式。从理论上可以区分两者,但是在具体结构设计上,系统开发上很难抉择。想和大家讨论一下:<br /><br />我的应用大致为:后台(socket server端)维护内存数据,前台(socket client)调阅修改这些数据。<br /><br />结构大致为:后台启动多个进程,其中一个维护内存数据(保存记录),另一个作为sock server端 listern;client connect 后,fork 新进程读写内存数据(sock连接断后该进程结束)。<br />该内存数据使用共享内存(加锁),以供各进程直接读写。<br /><br />但是如果使用多线程,就没有必要使用共享内存了。<br /><br />unix/linux下使用多线程,我接触得比较少,很难有定性的认识,而一般的介绍都是从代码编制的角度出发,还没看到过从系统结构、框架角度讨论的文章。<br /><br />特向大家请教使用进程和线程的利弊。

2004-3-31 10:31 无双
线程的开销更少 <br />包括IPC开销 还有创建开销<br /><br />不过<br />多个线程共享一个进程地址空间<br /><br />如果一个线程产生问题<br /><br />其它线程也会受到影响 <br /><br />如一个线程死掉了(因为访问非法地址的原因) 那整个进程也死掉了<br /><br />另外进程有独立的地址空间<br /><br />对一些私有数据的处理不用IPC机制 可以保存更多的状态 而且不必担心其它进程会访问到或是改变它们<br /><br /><br />所以 总的来说<br />如果每个进程都很简单 那考虑把它做成线程的模式 <br /><br />如果每个进程的实现比较复杂 那就保存为进程

2004-4-1 11:32 graduate
This is an interesting topic. but is there any hardware effect on the choice? Say, we have multiple cpu rather than a single one?<br /><br />Or is there any theoretical reference on this topic?

2004-4-1 12:50 无双
如果是多CPU的话<br />使用进程和线程的区别也是不大的<br /><br />在内核中调度的单位是线程 如果你的系统的线程是内核支持的话 <br /><br />如果线程是在用户空间支持的 那内核中调度的单位是进程 不过这个结构现在在主流系统中基本看不到 因为用户空间实现的线程 当一个线程阻塞时 内核无法知道其它线程还可以运行 所以会挂起整个进程  <br />当前多数系统已经提供了内核级支持 所以这问题可以不用考虑 <br /><br />在solaris下 <br />系统调度的是轻量级进程(或是其它叫法 网速太慢 不想google)<br />在进程中如果使用线程的话 必须使用pthread_setconcurrency设置最大并发度 <br />也就是这个进程中会有多少个线程同时运行 <br /><br />现在linux好像也开始提供类似solaris的实现了

2004-4-1 15:01 thrips
线程开发需要一些技巧,因为你的线程一不小心就可能相互影响。<br />进程开发需要一些资源,应为你的进程之间要通讯,就必然有额外的开销。

2005-2-2 17:14 wjing_zh
如不在嵌入式操作系统下编程的话,最好用多进程

2005-2-3 20:43 无双
如果操作过程不很复杂<br /><br />那使用多进程太浪费资源了点<br /><br />

2006-4-4 07:59 mummy6625
:'(

2006-4-4 11:18 mytux
如果想更深的了解进程和线程   最好的办法就是阅读 那些OS的源码分析  呵呵

2006-4-5 17:06 sinister
我帮你翻译下,以上几位意思就是说,如果你代码质量可以就用多线程,如果你程序写的不咋地就用多进程。呵

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.