python中的线程和进程,python多线程详解
Python线程
进程有很多优点,它提供了多通道编程,可以提高计算机CPU的利用率。既然工艺这么优秀,为什么还要螺纹?其实仔细观察会发现,过程中还是有很多缺陷的。
主要体现在以下几个方面:
一个进程一次只能完成一项任务。如果你想同时做两个或更多的任务,你必须打开多个进程来完成多个任务。
如果一个流程在执行过程中被阻塞,比如等待输入,整个流程就会挂起,即使流程中的一些工作不依赖于输入的数据,也不会被执行。
每个进程都有自己独立的空间,所以多进程的创建和销毁比多线程更费时,占用的系统资源也更多。
进程是资源分配的最小单位,线程是CPU调度的最小单位。每个进程至少有一个线程。
线程与进程的区别
可以归纳为以下四点:
1)地址空间:每个进程独立的进程都有自己独立的内存空间,也就是说一个进程中的数据在另一个进程中是不可见的。但是同一进程中的线程之间的数据是共享的。
2)通信:由于每个进程都有自己独立的内存空间,进程间通信需要IPC,而进程内的数据是多线程共享的,每个线程都可以访问。所以为了保证数据的一致性,需要锁。
3)调度和切换:线程上下文切换比进程上下文切换快得多。
4)在多线程操作系统中,进程不是可执行的实体。它的主要作用是向操作系统申请一个内存空间,然后在内存空间中启动一个线程执行任务,相当于一个容器,容器中的线程才是真正的执行者。一个进程可以包含多个线程,但是一个线程不能包含一个进程。因为进程是系统中最小的资源分配单位,一个线程不能向操作系统申请自己的空间,但是一个线程可以包含多个线程。
相关:《Python视频教程》
线程的特点:
在多线程操作系统中,一个进程通常包含多个线程,每个线程都是CPU利用的基本单位,是开销最少的实体。线程具有以下属性。
1)轻实体
线程中的实体基本不拥有系统资源,但是有一些必不可少的资源可以保证独立运行。
线程的实体包括程序、数据和TCB。线程是一个动态的概念,其动态特性用TCB(线程控制块)来描述。
2)独立调度和调度的基本单位。
在多线程OS中,线程是可以独立运行的基本单元,所以也是独立调度和分派的基本单元。因为线程是“轻”的,所以线程的切换非常快,开销很小(在同一个进程中)。
3)共享流程资源。
同一个进程中的每个线程都可以共享进程所拥有的资源,这首先表现在:所有线程都有相同的进程id,这意味着线程可以访问进程的每一个内存资源;此外,还可以访问打开的文件、定时器、信号量机制等。由进程拥有。因为同一个进程中的线程共享内存和文件,所以不需要调用内核来相互通信。
4)可以并发执行。
一个进程中的多个线程可以并发执行,甚至一个进程中的所有线程都可以并发执行;同样,不同进程中的线程可以并发执行,充分利用和发挥处理器与外围设备并行工作的能力。
线程的实现可以分为两类:
用户级线程和内核级线程,也称为内核支持的线程或轻量级进程。在多线程操作系统中,不同的系统以不同的方式实现。在一些系统中,实现了用户级线程,而在另一些系统中,实现了内核级线程。
用户线程和内核线程的区别:
1.内核支持的线程被OS内核感知,而用户级线程不被OS内核感知。
2.用户级线程的创建、取消和调度不需要OS内核的支持,而是在语言(如Java)层面处理;内核支持线程的创建、取消和调度,这些都需要OS内核的支持,与进程的创建、取消和调度大致相同。
3.当用户级线程执行系统调用指令时,自身的进程会被中断,而当内核支持线程执行系统调用指令时,只会导致线程被中断。
4.在只有用户级线程的系统中,CPU在一个运行的进程中调度多个线程,用户程序控制线程的轮换。在内核支持线程的系统中,CPU调度是基于线程的,OS的线程调度器负责线程调度。
5.用户级线程的程序实体是运行在用户态的程序,而内核支持线程的程序实体是可以运行在任何状态的程序。
内核线程的优缺点:
优点:当有多个处理器时,一个进程的多个线程可以同时执行。
缺点:由内核调度。
用户线程的优缺点:
优势:
p>线程的调度不需要内核直接参与,控制简单。
可以在不支持线程的操作系统中实现。
创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。
允许每个进程定制自己的调度算法,线程管理比较灵活。
线程能够利用的表空间和堆栈空间比内核级线程多。
同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。另外,页面失效也会产生同样的问题。
缺点:
资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。