什么是线程,线程和进程有什么区别,python 进程 线程
Num01线程
它是线程操作系统中可以执行操作调度的最小单元。它包含在流程中,是流程中的实际操作单元。
线程是指流程中控制流的单个序列。
多个线程可以在一个进程中并发,每个线程并行执行不同的任务。
Num02进程
进程是程序在数据集上的动态执行过程。
该过程包括以下三个部分:
1.程序:我们写的程序是用来描述流程需要完成什么功能,如何完成。
2.数据集:数据集是程序执行过程中需要的资源,如图片、音视频、文件等。
3.过程控制块:过程控制块用于记录过程的外部特征,描述过程的执行和变化。系统可以用它来控制和管理进程,它是系统感知进程存在的唯一标志。
Num03进程和线程的区别:
1.不同的操作模式:
一个流程不能单独执行,它只是一个资源的集合。
要操作CPU,进程必须首先创建一个线程。
同一进程中的所有线程共享同一进程所占用的内存空间。
2.关系
进程中的第一个线程为主线程,可以创建其他线程;其他线程也可以创建线程;线程是平等的。
有父进程和子进程,独立的内存空间和唯一标识符:pid。
3、速度
启动一个线程比启动一个进程要快。
以相同速度运行的线程和进程之间没有可比性。
线程的内存空间是共享的,进程的内存是独立的。
4.创造
一个父进程生成一个子进程,相当于复制了一个内存空间,进程之间不能直接访问对方。
创建新线程很简单。创建新流程需要父流程的副本。
一个线程可以控制和操作同级线程中的其他线程,但是一个进程只能操作子进程。
5.互动
同一进程中的线程可以直接相互访问。
两个进程之间的通信必须通过一个中间代理来实现。
相关:《Python视频教程》
Num04几个常见的概念
1.什么是并发和并行?
并发性:微观上,CPU轮流执行,宏观上,用户看到的是同时执行。因为cpu切换任务非常快。
并行:意味着系统真正具备同时处理多个任务(动作)的能力。
2.同步、异步和轮询有什么区别?
同步任务:B一直在等待A,然后B会在A完成后执行任务。(电话案例)
轮询任务:B还没有等A,B稍后再问A,稍后再问A。
异步任务:B不用一直等A。B会先做其他事情,A做完了会通知B。(短信箱)
Num05进程和线程的优缺点比较
首先,要实现多任务,我们通常会设计主-工模式,主负责分配任务,工负责执行任务。因此,在多任务环境中,通常有一个主设备和多个工人。
如果Master-Worker是用多个进程实现的,则主进程是Master,其他进程是Worker。
如果Master-Worker是通过多线程实现的,那么主线程就是主线程,其他线程就是工作线程。
多进程模式的优点是稳定性高,因为一个子进程崩溃,不会影响主进程和其他子进程。(当然,主进程挂了,所有进程都挂了,但是主进程只负责分配任务,挂的概率低。)著名的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上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。
相关推荐:
Python中的进程是什么
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。