您的位置:首页 > 编程语言 > Python开发

python中进程、线程的浅谈

2017-12-03 15:39 232 查看
什么是进程、线程?

进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的
计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组
成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程
的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中
呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指 线程占有处理机正在
运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

协程:协程与子例程一样,协程(coroutine)也是一种程序组件。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程源自 Simula 和
Modula-2 语言,但也有其他语言支持。(一般地认为,子例程是某个主程序的一部分代码,该代码执行特定的任务并且与主程序中的其他代码相对独立。子例程又
被称为子程序、过程、方法、函数等。在主程序中可以调用子例程来执行。函数,是一种子程序,利用函数名称,可以接收回传值。)
说完了定义,下面我们来谈谈他们之间的关系,以及理解。

进程:从字面上的理解,进程就是正在进行的程序,也就是运行中的程序。进程是有生命周期的。相对于进程而言,程序就是一段代码,是一组计算机指令操作步骤的
集合,它是没有生命的,当被执行时候,才会被调用赋予生命变成进程。一个程序至少有一个进程,而一个进程至少有一个线程。进程之间不存在共享任何状态,进程的
调度是由操作系统完成的,每个进程都有独立的内存空间,以及系统分配独立的其他资源,不同的进程通过进程间通讯来完成,由于进程比较重量,所以导致上下文切换
的开销比较大,当相对来说比较安全。进程与线程主要差别就是不同的操作系统资源的管理方式,当其中的一个进程崩溃了,不会影响其他的进程,这也是进程最大的优
点,但是因为每个进程都拥有自己独立的资源,相对线程来说也更耗费资效率也差一些。可以通过python的多进程multiprocessing模块提高ptyhon的效率等方法。

线程:同样通过字面的理解,线程像线一样细小的程序。线程是进程的一个实体,是cpu调度的基本和分派的基本单位,他是比进程更小的能独立的基本单位,但是线程
拥有更少的系统资源,线程可以与同一个进程中的其他线程共享进程中的所有资源,线程间的通讯主要通过内存共享,上下文切换,资源开销比较小,但是不稳定。一个
线程可以创建和销毁另一个线程,同一个进程中的多个线程之间可以并发执行。相对进程而言,线程是一个更加接近执行体的概念,它可以与同进程中的其他线程共享数
据,但拥有自己的栈空间,拥有独立的执行序列。
线程进程的区别:

1)一个程序至少有一个进程,一个进程至少有一个线程。

2)线程的划分尺度小于进程,使得多线程程序的并发性高。

3)另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4)线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口,顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,

由应用程序提供多个线程执行控制。

5)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理

以及资源分配。这就是进程和线程的重要区别。

线程与进程的优缺点

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

(SMP的全称是"对称多处理"(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统

以及总线结构。)

<上述文章有自己总结的也有借鉴其他人的地方,总之希望给像我这样的小白来来一点帮助,如果文章中有不对的地方希望多多指正>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 进程 线程