多进程和多线程设计思考

特点

多线程
优点:提高系统的并行性,并且开销小。
缺点:没有内存隔离,单个线程的崩溃会导致整个应用的退出,发生采内存等bug时,定位及其不方便。

多进程
优点:内存隔离,单个进程的异常不会导致整个应用的崩溃。方便调试。
缺点:进程间调用,通讯和切换开销均比多线程大。

应用程序域
MacroSoft提出的解决方案,它结合了多线程和多进程的优点。相当于增加了内存隔离的多线程。托管代码通过验证过程,其中包括了内存检查以提供隔离。

 

线程也有自己的资源,比如栈,私有数据等等。说他使用而不拥有资源指的是使用的是进程的打开文件句柄,进程的全局数据,进程的地址空间等等,这些都属于进程,而不属于线程,进程内个线程共享。
进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小

通讯

内容通讯:socket,共享内存,管道,分布式数据库,文件

事件通知:互斥量,信号量

应用场景

多线程:在存在大量IO,网络等耗时操作,或者需要和用户交互时,使用多线程有利于提高系统的并行性和用户界面快速相应从而提高友好性。

多进程:目标子功能间交互少,如果资源和性能许可,请设计由多个子应用程序来组合完成你的目标。

设计技巧

原则: 正如《UNIX编程艺术》所提及的,完美之道,不在于无可添加,而在于无可删减。

1.  尽量避免长驻内存的进程,例如那些很少用到的功能,或周期性很长(10分钟以上),把它们的功能提取出来,做成一个小的应用程序。需要的时候再把它们拉起来(如通过crontab配置,或直接system)。
2.  把目标设计成子功能系统的组合可用提高重用的易用性和维护性。
把目标根据功能划分不同的子系统,子系统间遵循特定的协议(文本或XML),由通讯联系起来,协作完成目标。
典型的案例就是UNIX或LINUX的工具使用。如:$ cat veglist fruitlist | sort > clist,用cat 打开文件,协议 是字符流,通过管道(通讯手段 传给sort 进行排序,把排序的结果流重定向到文件中。这种自由组合协作风格应用思想和编程思路也是吸引众多UNIX拥护者的原因之一吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值