Python中进程与线程的区别是什么

Num01–>线程
线程是操作系统中最小的操作调度单位。它包含在过程中,是过程中的实际操作单位。
线程是指过程中一个单一顺序的控制流。
多个线程可以并发在一个过程中,每个线程可以并行执行不同的任务。
Num02–>进程
这个过程是一个程序在数据集上的动态执行过程。
这个过程由以下三部分组成:
1.程序:我们编写的程序用于描述过程应该完成什么功能以及如何完成。2.数据集:数据集是程序执行过程中所需的资源,如图片、音频、视频、文件等。3.过程控制块:过程控制块用于记录过程的外部特征,描述过程的执行和变化过程。系统可以用它来控制和管理过程,这是系统感知过程存在的唯一标志。
Num03–>过程与线程的区别:
1、不同的操作方式:
这个过程不能单独执行,它只是资源的集合。
要操作CPU,必须先创建一个线程。
同一过程中的所有线程都是共享同一过程所占用的内存空间。
2,关系
第一个线程是主线程,主线程可以创建其他线程;其他线程也可以创建线程;线程之间是平等的。
过程包括父亲过程和子过程、独立的内存空间、唯一的标识符:pid。
3,速度
启动线程比启动过程快。
运行线程与运行进程速度相同,无可比性。
线程共享内存空间,过程内存独立。
4,创建
父亲的生成过程相当于复制一个内存空间,不能直接访问过程
创建新的线程非常简单,创建新的过程需要复制父亲的过程。
在同一级别的线程中,一个线程可以控制和操作其它线程,但进程只能操作子进程。
5,交互
可直接访问同一过程中的线程。
通信必须通过中间代理实现两个过程。
相关推荐:Python视频教程
Num04–>几个常见的概念
1.什么并发并行?
并发:CPU在微观上轮流执行,用户在宏观上看到并同时执行。由于CPU切换任务非常快。
并行:是指系统有能力同时处理多个任务(动作)。
2.同步、异步和轮询的区别?
同步任务:B等A,等A完成后再执行任务。(打电话案例)
轮询任务:B没有一直等A,B以后问A,以后问A
异步任务:B不需要一直等A, B先做其他事情,A完成后通知B。(发短信案例)
Num05–>比较过程和线程的优缺点
首先,为了实现多任务,我们通常设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。因此,在多任务环境下,通常是一个Master和多个Worker。
如果Master在多个过程中实现-Worker,主要过程是Master,其他过程是Worker。
如果Master用多线程实现-Worker,主线程是Master,其他线程是Worker。
多过程模式的优点是稳定性高,因为一个子过程崩溃,不会影响主过程和其他子过程。(当然,所有的过程都挂在主过程中,但Master过程只负责任务的分配,挂断的概率很低。)著名的Apache最早采用多过程模式。
多过程模式的缺点是创建过程成本高。在Unix/Linux系统下,使用fork调用是可以的,在Windows下创建过程成本巨大。此外,操作系统可同时运行的过程数量也有限。在内存和CPU的限制下,如果同时运行数千个过程,操作系统甚至会出现调度问题。
多线程模式通常比多过程快一点,但并不快。此外,多线程模式的致命缺点是,由于所有线程共享过程的内存,任何线程挂断都可能直接导致整个过程崩溃。在Windows上,如果线程执行代码有问题,您经常可以看到“程序执行非法操作,即将关闭”的提示。事实上,一个线程往往有问题,但操作系统将强制结束整个过程。
在Windows下,多线程的效率高于多过程,因此微软的IIS服务器默认采用多线程模式。由于多线程的稳定性,IIS的稳定性不如Apache。为了缓解这个问题,IIS和Apache现在有多过程+多线程的混合模式,这使得问题变得越来越复杂。
Num06–>计算密集型任务和IO密集型任务
是否使用多任务的第二个考虑因素是任务类型。我们可以将任务分为计算密集型和IO密集型。
第一种:计算密集任务的特点是进行大量的计算,消耗CPU资源,如计算周转率、高清视频解码等,都取决于CPU的计算能力。虽然这种计算密集任务也可以用多个任务来完成,但任务越多,在任务切换上花费的时间就越多,CPU执行任务的效率就越低。因此,为了最有效地利用CPU,同时计算密集任务的数量应等于CPU的核心数量。
代码运行效率非常重要,因为计算密集型任务主要消耗CPU资源。像Python这样的脚本语言运行效率低下,完全不适合计算密集型任务。对于计算密集型任务,最好用C语言编写。
第二类:任务类型为IO密集型,涉及网络和磁盘IO的任务为IO密集型任务。这些任务的特点是CPU消耗量很小,任务的大部分时间都在等待IO操作完成(因为IO的速度远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有限制。大多数常见的任务都是IO密集型任务,如Web应用程序。
在IO密集型任务的执行过程中,99%的时间花在IO上,很少花在CPU上。因此,用Python等运行速度极低的脚本语言代替运行速度极快的C语言,根本无法提高运行效率。对于IO密集型任务,最合适的语言是开发效率最高(代码最少)的语言。脚本语言是首选,C语言是最差的。
相关推荐:
Python的过程是什么?
