多进程与多线程的选择

转载 2016年08月31日 10:44:45

http://blog.chinaunix.net/uid-23770712-id-3013993.html

上周去参加答辩,内容是安防系统,然后就想到了我们如何来实现我们的程序,是选择进程还是线程。带着疑惑,查了些资料,总结如下:

1、首先要明确进程和线程的含义:

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。进程是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

使用线程的好处有以下几点:

a)使用线程可以把占据长时间的程序中的任务放到后台去处理

b)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

c)程序的运行速度可能加快

d)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

2、其次来看下线程和进程的关系

线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

3、然后我们来看下线程和进程间的比较

4、设计时考虑的使用技巧

这里参照ang639在多进程和多线程设计思考中提及的原则:

1.尽量避免长驻内存的进程,例如那些很少用到的功能,或周期性很长(10分钟以上),把它们的功能提取出来,做成一个小的应用程序。需要的时候再把它们拉起来(如通过crontab配置,或直接system)。

2.把目标设计成子功能系统的组合可用提高重用的易用性和维护性。 
把目标根据功能划分不同的子系统,子系统间遵循特定的协议(文本或XML),由通讯联系起来,协作完成目标。

也就是说,我们在做设计的时候可以如下考虑:

1、线程的创建以及线程间的通信和同步都比进程要快。 在多核CPU上的任务分割是对线程而言的,不是进程。

2、如果不需要频繁的创建和销毁 执行的效率是并不多的,需要频繁创建的话,线程快。

3、其它的就根据你的实际情况选择了, 要是没有数据通信什么的, 线程间的通信比进程间方便。最关键的一点,多线程可以让同一个程序的不同部分并发执行。

所以在做安防系统的时候,报警系统和监控系统之间可以用多进程来做,对于报警系统中可以用多线程来实现如果发生意外,可以向用户发送消息,同时鸣笛,以及如果是火警的话,可以打开阀门等。

 
转自:http://www.embedu.org/Column/Column149.htm

多线程还是多进程的选择及区别

http://blog.csdn.net/pingd/article/details/17895933   原文:http://blog.csdn.net/lishenglong666/a...
  • u010229420
  • u010229420
  • 2016年09月21日 15:36
  • 1202

多线程还是多进程的选择及区别

原文:http://blog.csdn.net/lishenglong666/article/details/8557215  最原始的博主我没有找到,只能把我从何处转的此篇博文的链接发出来。感觉这篇...
  • pingD
  • pingD
  • 2014年01月05日 23:42
  • 42524

多线程和多进程模型的选用

多线程和多进程模型的选用 这里的线程指通过linux的pthread_create而产生的原生线程,线程资源很宝贵,能被操作系统的任务调度器看见的(不是python gevent、go goroui...
  • wm_1991
  • wm_1991
  • 2016年01月04日 13:54
  • 2068

编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程

线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执...
  • luoweifu
  • luoweifu
  • 2015年06月22日 20:05
  • 51583

linux服务器多线程还是多进程的选择及区别

鱼还是熊掌:浅谈多进程多线程的选择 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,...
  • zmbbb
  • zmbbb
  • 2016年03月17日 13:49
  • 1930

为什么在Python里推荐使用多进程而不是多线程?

最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?                  要知其然,更要知其所以然。所以有了...
  • You_are_my_dream
  • You_are_my_dream
  • 2017年02月21日 22:04
  • 2275

什么是多线程和多进程

线程和进程都是现在电脑概念里比较时髦的用语,什么是多线程,什么是多进程?本文详细的给您介绍一下,希望能增进您对当代电脑技术的了解,有不到之 处,还往高手予以更正。进程(英语:Process,中国大陆译...
  • yangbbenyang
  • yangbbenyang
  • 2014年08月07日 13:32
  • 903

Python多线程与多进程

查看原文:http://www.wyblog.cn/2016/12/05/python%e5%a4%9a%e7%ba%bf%e7%a8%8b%e4%b8%8e%e5%a4%9a%e8%bf%9b%e7...
  • wy250229163
  • wy250229163
  • 2016年12月22日 21:22
  • 1477

python中多进程和多线程的配合使用

由于python的多线程中存在PIL锁,因此python的多线程不能利用多核,那么,由于现在的计算机是多核的,就不能充分利用计算机的多核资源。但是python中的多进程是可以跑在不同的cpu上的。因此...
  • nfzhlk
  • nfzhlk
  • 2017年08月09日 06:47
  • 424

为什么在Python里推荐使用多进程而不是多线程?

转载地址  最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?   要知其然,更要知其所以然。所以有了下面的深入研...
  • universe_ant
  • universe_ant
  • 2016年04月25日 16:19
  • 8446
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多进程与多线程的选择
举报原因:
原因补充:

(最多只允许输入30个字)