首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
高性能编程基础:类、对象
高性能编程基础:进程与线程
多进程与多线程
高并发编程的挑战
高性能编程的挑战
Python线程安全性的实现
Python线程同步的实现
Python原子性的实现
CPython虚拟机
Python代码执行过程分析
Python代码执行性能优化原理
基于Pypy的Python代码执行性能优化原理
高并发与高性能之间的关系
从源码角度剖析Python对象的创建过程
Python对象的状态
Python对象的内存回收机制
Threading模块与高并发
Threading模块中常用方法和类的实现原理解析
Python线程的创建与使用
Python协程的基本概念
EventLoop的运作原理
Python中EventLoop的实现
深入理解Asyncio库
使用EventLoop和Asyncio库实现Python协程
Python线程阻塞现象及原因分析
为什么会出现Python线程竞争
如何保证Python线程顺序执行
线程间通信-单线程的等待
多线程之间的通信
Python线程死锁现象及原因分析
Python中如何实现锁
Python中主流的内置锁及其实现原理
Python中GIL与线程锁的区别和联系
公平锁与非公平锁
Python线程安全介绍
实现Python线程安全
什么是线程优先级
Python线程优先级的实现
线程同步与异步
Python中的线程同步实现
Python中的线程异步实现
Python中的原子变量与原子性操作
原子变量与原子性操作的实现原理
什么是线程池
Python线程池的实现方式
当前位置:
首页>>
技术小册>>
Python高并发编程与实战
小册名称:Python高并发编程与实战
### 1.3 进程与线程 在对Python类和对象有了一定了解之后,我们还需要了解进程与线程。对于进程与线程,这里不会局限于Python语言层面,而是从操作系统层面展开介绍。进程与线程是入门Python高并发编程必须掌握的基础知识。 1.3.1 进程与线程的区别和联系 进程(Process)是计算机中的基础运算单元,是CPU统筹计算机中所有任务的程序实体。CPU通过对不同进程进行调用,协调位于寄存器、运算器以及内存中计算机任务的时间片,使每个计算机任务都能得到合理执行和调用。 线程(Thread)是计算机任务的具体执行者,是操作系统能够进行运算、调度的最小单位。线程隶属于一个具体的进程。在同一时刻,一个进程可以拥有一个或多个线程,线程是开发者可以直接与计算机CPU或内存进行交互的最小单位。 在操作系统(泛指Windows系统或Linux系统)中,进程指的是CPU调度的程序实体,线程是具体程序实体的执行者。一个进程可以包含多个线程,但是一个线程只能从属于一个具体的进程。一个线程不能跨进程存在,但是一个进程中的线程可以通过技术手段访问或操作另一个进程中的线程。 下面通过画图的方式来阐述进程与线程在Python项目中的存在方式,如图1-6所示。 ![](/uploads/images/20231206/73289e6238c2714aac0d834645b76e8d.png) 一个具体的Python项目可以表示为一个进程,即Python项目启动之后,就会在计算机中以一个具体的进程存在,并且由计算机操作系统管理。 当启动Python项目时,根据Python虚拟机(或解释器)解析Python语言的规范,Python虚拟机会创建一个专门用于解析Python语言的主线程,接着会创建一个专门用于执行Python语言所定义的任务的工作线程,即一旦Python项目正常运行起来,在计算机中就会存在一个Python主线程和至少一个工作线程。如果是多线程的业务场景,Python就会创建出多个工作线程来并发执行任务。 1.3.2 线程的7种状态 任何一个具体的Python线程拥有7种不同的状态。这7种不同的状态构成了线程的生命周期。 ● 线程创建状态:该状态表明线程刚刚被创建,还没有被调用或初始化,此时的线程只是一个空的线程对象。 ● 线程就绪状态:在该状态下,初始化一些线程运行所需要的属性和方法,以便被任务调用。 ● 线程运行状态:线程实际运行的状态,即线程一旦被任务调用,就会从线程就绪状态转变为线程运行状态,且线程一旦进入运行状态,就表明已经开始执行任务了。 ● 线程中止状态:当线程在运行状态时,由于任务中止或者人为操作等迫使线程停止运行,线程从运行状态转变为中止状态。转变为中止状态的线程,如果没有人为干预,不会自动执行,除非给线程设定一定的饱和策略或其他可恢复线程执行的策略条件。 ● 线程等待状态:线程等待状态分为无限期等待状态和限期等待状态。无限期等待表示CPU资源被先前的线程抢占,且先前的线程一直不释放CPU资源,导致当前线程无限期等待下去;限期等待表示先前已经抢占到CPU资源的线程,在过了一定时间后会自动释放CPU资源,当前线程只需要等待一定时间即可获取CPU资源。线程运行状态无论转变为无限期等待状态还是转变为限期等待状态,均需要开发者控制,线程无法自动转换。 ● 线程结束状态:该状态表明当前线程已经执行完毕,这里所说的执行完毕包括线程已经执行完任务,或者线程在转变为中止状态之后,又转变为结束状态。线程可以在程序执行完后转变为结束状态,也允许开发者手动结束当前线程而转变为结束状态。 为了更清楚地说明线程状态,以及线程各状态间的转换,笔者画了一张线程状态转换图,如图1-7所示。 ![](/uploads/images/20231206/26933b9ffb0ddd44d215b250a525b66c.png)
上一篇:
高性能编程基础:类、对象
下一篇:
多进程与多线程
该分类下的相关小册推荐:
Python合辑11-闭包函数
Python合辑6-字典专题
Python编程轻松进阶(二)
Selenium自动化测试实战
机器学习算法原理与实战
Python与办公-玩转Excel
Python合辑12-面向对象
Python与办公-玩转PPT
Python编程轻松进阶(三)
Python合辑3-字符串用法深度总结
Python数据分析与挖掘实战(下)
Python编程轻松进阶(五)