当前位置: 首页 > 图灵资讯 > 行业资讯> 一文带你读懂Python线程

一文带你读懂Python线程

发布时间:2025-10-08 17:44:50

Python线程

这个过程有很多优点,它提供了多个编程,可以提高计算机CPU的利用率。既然这个过程很好,为什么要线程呢?事实上,仔细观察会发现这个过程仍然有很多缺陷。

主要体现在以下几个方面:

这个过程只能在一个时间内完成一个任务。如果你想同时完成两个或多个任务,你必须打开多个过程来完成多个任务。

如果过程在执行过程中被堵塞,比如等待输入,整个过程就会挂断,即使过程中的一些工作不依赖输入数据,也无法执行。

每个过程都有自己独立的空间,因此创建和销毁多过程比多线程更耗时,占用系统资源。

流程是资源分配的最小单位,线程是CPU调度的最小单位,每个流程至少有一个线程。 

线程与过程的区别

可概括为以下四点:

1)地址空间:每个过程都有自己独立的内存空间,也就是说,一个过程中的数据在另一个过程中是看不见的。但同一过程中的线程间数据是共享的。

2)通信:由于每个过程都有自己独立的内存空间,因此过程之间的通信需要IPC,过程中的数据共享多个线程,每个线程都可以访问。因此,为了确保数据的一致性,需要使用锁。

3)调度和切换:线程上下文切换比工艺上下文切换快得多。

4)在多线程操作系统中,该过程不是一个可执行的实体。其主要功能是向操作系统申请内存空间,然后在内存空间中打开线程执行任务,这相当于一个容器。容器中的线程是真正的执行器。一个过程可以包含多个线程,而一个线程不能包含过程。由于过程是系统资源分配的最小单位,线程不能向操作系统申请自己的空间,但一个线程可以包含多个线程。

相关推荐:Python视频教程

线程的特点:

在多线程操作系统中,通常在一个过程中包含多个线程,每个线程作为使用CPU的基本单元,是成本最低的实体。线程具有以下属性。

1)轻型实体

线程中的实体基本上没有系统资源,但有一些必不可少的资源可以保证独立运行。

线程的实体包括程序、数据和TCB。线程是由线程控制块TCB的动态概念(Thread Control Block)描述。

2)独立调度和分配的基本单位。

在多线程OS中,线程是独立运行的基本单位,因此也是独立调度和分配的基本单位。由于线程非常“轻”,线程切换非常快,成本很低(在同一过程中)。

3)共享流程资源。

在同一过程中,每个线程都可以共享过程中的资源,这首先体现在:所有线程都有相同的过程ID,这意味着线程可以访问过程中的每个内存资源;此外,还可以访问打开文件、定时器、信号量机构等。由于同一过程中的线程共享内存和文件,因此线程之间的相互通信不需要调用核心。

4)可并发执行

可以在一个过程中的多个线程之间并发执行,甚至允许所有线程在一个过程中并发执行;同样,不同过程中的线程也可以并发执行,充分利用和发挥处理器与外围设备并行工作的能力。

线程的实现可分为两类:

用户级线程(User-Level Thread)并且内核级线程(Kernel-Level Thread),后者也被称为内核支持的线程或轻量级过程。在多线程操作系统中,每个系统都有不同的实现方式,在一些系统中实现用户级线程,在一些系统中实现内核级线程。

用户线程与内核线程的区别:

1、OS内核可以感知内核支撑线程,而OS内核不能感知用户级线程。

2、用户级线程的创建、取消和调度不需要OS内核的支持,而是在语言(如Java)层面进行处理;内核支持线程的创建、取消和调度需要OS内核的支持,与过程的创建、取消和调度基本相同。

3、当用户级线程执行系统调用指令时,它所属的过程将被中断,当内核支持线程执行系统调用指令时,只会中断线程。

4、在只有用户级线程的系统中,CPU调度仍然以过程为单位,多个线程由用户程序控制,CPU调度以线程为单位,OS线程调度程序负责线程。

5、用户级线程的程序实体是在用户状态下运行的程序,而内核支持线程的程序实体是在任何状态下运行的程序。

内核线程的优缺点:

优点:当有多个处理器时,可以同时执行一个过程的多个线程。

缺点:由内核调度。

用户线程的优缺点:

优点:

线程的调度不需要直接参与核心,控制简单。

可在不支持线程的操作系统中实现。

线程管理的成本远低于内核线程,如创建和销毁线程、线程切换成本等。

允许每个过程定制自己的调度算法,线程管理更加灵活。

表空间和堆栈空间比内核线程可以使用更多的线程。

在同一过程中,只能同时运行一个线程。如果使用系统调用并堵塞一个线程,则整个过程将被悬挂。此外,页面故障也会产生同样的问题。

缺点:

根据流程进行资源调度。在多个处理器下,同一过程中的线程只能在同一处理器下分时重复使用。

相关文章

一文带你读懂Python线程

一文带你读懂Python线程

2025-10-08
一文带你读懂JSON模块

一文带你读懂JSON模块

2025-10-08
一文带你读懂Python中的pickle模块

一文带你读懂Python中的pickle模块

2025-10-08
Python静态方法和类方法的区别和应用

Python静态方法和类方法的区别和应用

2025-10-08
详细介绍Python网络编程模块

详细介绍Python网络编程模块

2025-10-08
加速Python程序运行

加速Python程序运行

2025-10-08