多进程还是多线程?

多进程还是多线程?

对于新的业务,是以进程还是线程的方式展开,是一个需要思考的问题。

首先,关键的一点是,进程是cpu调度和资源分配的实体,单独占用系统资源。线程共享着进程内部的资源,运行起来是cpu调度的一个基本单位。 也就是说,不同的进程按照优先级占用时间片,单独有着自己的地址空间,而一个进程内部的多个线程共享着该进程的时间片和内存空间。

选择进程化的业务,

优点在于:

1. 和已有的业务进程有着很好的隔离,不管是内存上的,还是性能开销上,对后续的业务健壮性和性能优化都有好处;

2. 扩展性也比较好,说不定哪天决定将新的业务直接拿去别的设备上跑了;

缺点在于:

1. 相比一个进程里面直接访问内存来看,ipc通信比较复杂,一般是socket通信,要不就是共享内存方式;

2. 如果新业务进程化,那么在以来老的业务时,如果不是组件化很强的架构,那么代码的复用是个大问题,或导致冗余开发和大量的重复代码,对后面 的维护和扩展来说都是挑战;

选择线程化的业务,

优点在于:

1. 开发简单,已有业务内部抛个线程出来是分分钟的事,依赖的接口也都是现成的;

2. 数据共享简单,内存资源,文件描述符都是共享的;

缺点在于:

1. 业务之间的相互干扰,模块很多的情况下,其中一个子功能的稳定性很看其余功能的表现,尤其嵌入式开发时的内存越界和线程阻塞的问题总是不断;

 

代码的框架总是可以控制的,整体趋势都是会越来越内聚的提供功能,所以,只要不是数据需要频繁交互的情况,或者业务框架已经确定都是网络socket通信的情况下,多进程都是较好的选择。

posted @ 2018-12-12 20:36  doctorJ  阅读(199)  评论(0编辑  收藏  举报