线程、进程、多线程、多进程

http://blog.csdn.net/lishenglong666/article/details/8557215

线程进程的联系和区别

定义:

进程是程序在计算机上的一次执行活动,是系统进行资源分配和调度的一个独立单位;

 线程是进程的一个实体,是cpu调度和分派的基本单位,他是比进程更小的能独立运行的基本单位;线程自己基本上不拥有系统资源,只用有点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程;

线程与进程的关系:

1)     一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

2)     资源分配给进程,同一进程内的所有线程共享该进程的所有资源

3)     线程在执行过程中需要协作同步。不同进程中的线程之间要利用消息通信的方法实现同步

4)     处理机分配给线程,即真正在处理机上运行的是线程

5)     线程是进程的一个执行单元,也是进程内的可调用实体

线程与进程的区别:

1)     调度:线程作为分配和调度的基本单位,进程作为拥有资源的基本单位

2)     并发性:不进进程之间可以并发执行,同一进程内的线程也可以并发执行

3)     拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的系统资源

4)     系统开销:在创建和撤销进程的时候,系统都要分配和回收资源,导致系统的明显大于创建和撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式的下不会对其他进程造成影响,而线程只是进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有独立的地址空间,一个线程死后就等于整个进程死掉,所以多进程程序要比多线程程序健壮,但是在进程切换的时候消耗的资源较大,效率差;

根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1)速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。线程的划分尺度小于进程,使得多线程程序的并发性高。
2)资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3)同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内

一句话总结:多线程执行效率高;  多进程耗资源,安全

线程的优点:

1)它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码 段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程 所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能 会有较大的区别;

2)线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;

3)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;

4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

线程的缺点:

1)调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;

2)程序设计上容易出错(线程同步问题)

进程的优点:

1)顺序程序的特点:具有封闭性和可再现性;

2)程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。

进程的缺点:

操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享,通讯也比较麻烦。线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

多线程与多进程的优缺点

http://www.cnblogs.com/Yogurshine/p/3640206.html

多线程的优点:

无需跨进程边界; 程序逻辑和控制方式简单; 所有线程可以直接共享内存和变量等; 线程方式消耗的总资源比进程方式好;

多线程缺点:

每个线程与主程序共用地址空间,受限于2GB地址空间; 线程之间的同步和加锁控制比较麻烦; 一个线程的崩溃可能影响到整个程序的稳定性; 到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数; 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

多进程优点:

每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 通过增加CPU,就可以容易扩充性能; 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

多进程缺点:

逻辑控制复杂,需要和主程序交互; 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大; 最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+CPU+轮询方式来解决问题……方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

线程、进程、多线程、多进程,布布扣,bubuko.com

时间: 2024-08-03 16:48:04

线程、进程、多线程、多进程的相关文章

线程 进程 多线程 多进程

进程和线程的主要区别在于多进程每个进程拥有独立存储空间,而多线程共享存储空间.对于单核CPU来讲,如果是阻塞操作,或者不耗时非阻塞操作,多进程/线程不会提高效率,这时候多进程/线程最有用的通常是耗时而又非阻塞的I/O操作. 打个比喻,一个人要看两部电影,可以看完一部再看另一部,也可以同时看,看一眼这个暂停,看一眼那个再暂停看回前一个,快速不停切换,你会觉得因为两部一起看所以先看完吗?理论上两部电影播放时间加起来是一样,所以看完所用时间应该一样.但是实际使用时间反而可能第一种方法快,为什么?切换是

线程 进程 多线程的使用

什么时候该使用多线程 什么时候该使用多线程,以及更恰当的多线程编程方法之讨论 大约在写了一年左右的应用程序以后开始发生了一些困惑,在我写的程序中很多使用了多线程,我们了解使用线程的必要性,但是什么时候使用,以及该如何更好使用和管理多线程方面,我觉得值得思考. 先讨论一下CApp类的实质.App就是一个用户界面线程. 众所周知,CApp类继承于CWinThread类,是一个线程类,它的实例就是应用程序的主线程(一个用户界面线程).App 实例化一个WinThread以后,主要的工作就是维护一个消息

进程、线程、多线程相关总结

进程.线程.多线程相关总结 一.说说概念 1.进程(process) 狭义定义:进程就是一段程序的执行过程. 广义定义:进程是一个程序关于某个数据集合的一次运行.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 简单的来讲进程的概念主要有两点:第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stack region).文本区域存储处理器执行的代码:数

在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析

首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时候cpu的使用效率: 1)单线程执行的时候: 2)多线程执行的时候: 3)多进程执行的时候: 总结: 1)单进程单线程时,对于双核CPU的利用率只能利用一个核,没有充分利用两个核. 2)单进程多线程时,对于双核CPU的来说,虽然两个核都用到的,不过很明显没有充分利用两个核,这里要说一个GIL(全局解

进程、线程、多线程的网址集结(看)

面试总是会问这方面的内容,自己虽然知道一点点点点的概念,但是并不是很透彻的了解,这次,面试就挂在这个问题上了.哎.还是先提前写一下这个吧.进程和线程. 1.进程和线程 下面这个总结得挺好的. http://www.cnblogs.com/obama/archive/2013/04/12/3016509.html 2.多线程的讲解 http://blog.csdn.net/column/details/killthreadseries.html http://blog.csdn.net/morew

线程与多线程、进程

1.单线程:单线程是一个人干一件事,也是主线程,从上到下有顺序的去干,python解释器就是个单线程(主线程),所以当事情多了,一个人也办法,就等着拜 2.多线程:有2个线程以及以上的叫多线程,分为主线程和子线程 (主线程和子线程是相对的,正在干活的是主线程),有一大堆的事情,很多人一起干,当主线程空档期,子线程抢占活,但是始终只有一个人在干活(主线程).(主线程累啦,子线程抢占活,这是子线程就变成主线程.多线程特点:共同干一件事情,抢占资源,利用了主线程的空档期,这个Cpython的特性,就是

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

线程进程概述

进程和线程目的,提高执行效率 1,单进程单线程,主进程,主线程 2,自定义线程: 主线程 主线程 子线程 进程: 优点,同时利用多个CPU,能同时进行多个操作 缺点,耗费资源,(重新开辟内存) 线程: 优点,共享内存,IO操作时候,创造并发操作 缺点,抢占资源 进程不是 越多越好,CPU个数=等于进程个数 线程也不是越多约好,具体案例具体分析 计算机中执行任务的最小单元是:线程 IO 操作利用CPU GIL,全局解释器锁 IO密集型(不用CPU) 多线程 计算密集型(用CPU) 多进程

Java线程及多线程技术及应用

第6 章 Java线程及多线程技术及应用 6.1线程基本概念 1.进程和线程的基础知识 l 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) l 线程:进程中的一段代码,一个进程中可以哦有多段代码.本身不拥有资源(共享所在进程的资源) 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程. 区别: 1.是否占有资源问题 2.创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大. 3.进程为重量级组件,线程为轻量级组件 l 多进程: 在操作系统中能同时运行

多线程多进程基础

看廖雪峰的多线程多进程教程看的云里雾里的,google了一下,贴上来点重点. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间.多任务操作系统可以“并发”执行这些进程. 线程是指进程中乱序.多次执行的代码块,多个线程可以“同时”运行,所以认为多个线程是“并发”的. 多线程vs多进程 操作系统会为每个进程分配不同的内存块,而多个线程共享进程的内存块.这带来最直接的不同就是创建线程的开销远小于创建进程的开销. 同时,由于内存块不同,所以进程之间的通信相对困难.需要采用pipe/n