Python多线程

Python多线程

Python多线程详细操作教程
通常,众所周知,线是很细的绞线,通常是棉或丝绸织物,用于缝制衣服等。在计算机编程领域中也使用相同的术语"线程"。现在,我们如何将用于缝纫衣服的线程与用于计算机编程的线程联系起来?这两个线程执行的角色在此处相似。在衣服中,线程将衣服合在一起,而在另一端,在计算机程序中,线程将计算机程序保持在一起,并允许该程序一次执行顺序动作或一次执行许多动作。
线程是操作系统中最小的执行单元。它本身不是程序,而是在程序中运行。换句话说,线程不是彼此独立的,而是与其他线程共享代码节,数据节等。这些线程也称为轻量级进程。

线程状态

要深入了解线程的功能,我们需要了解线程的生命周期或不同的线程状态。通常,线程可以以五个不同的状态存在。不同的状态如下所示-

新主题

新线程以新状态开始其生命周期。但是,在此阶段,它尚未开始,并且尚未分配任何资源。我们可以说它只是一个对象的实例。

可运行

在启动新出生的线程时,该线程变为可运行的,即等待运行。在这种状态下,它具有所有资源,但任务计划程序仍未计划其运行。

运行

在这种状态下,线程进行进度并执行任务,任务调度程序已选择该任务来运行。现在,线程可以进入死状态或非运行/等待状态。

未运行/正在等待

在这种状态下,线程被暂停是因为它正在等待某些I / O请求的响应或正在等待其他线程的执行完成。

死亡

可运行线程在完成任务或以其他方式终止时进入终止状态。
下图显示了线程的完整生命周期-
死亡

线程类型

在本节中,我们将看到不同类型的线程。类型描述如下-

用户级线程

这些是用户管理的线程。
在这种情况下,线程管理内核不知道线程的存在。线程库包含用于创建和销毁线程,在线程之间传递消息和数据,计划线程执行以及保存和还原线程上下文的代码。该应用程序从一个线程开始。
用户级线程的示例是-
Java线程 POSIX线程 死亡

用户级线程的优势

以下是用户级线程的不同优势-
线程切换不需要内核模式特权。 用户级线程可以在任何操作系统上运行。 调度可以是特定于应用程序的用户级线程。 用户级线程可以快速创建和管理。

用户级线程的缺点

以下是用户级线程的不同缺点-
在典型的操作系统中,大多数系统调用都处于阻塞状态。 多线程应用程序无法利用多处理功能。

内核级线程

操作系统托管线程在内核上起作用,内核是操作系统的核心。
在这种情况下,内核执行线程管理。应用程序区域中没有线程管理代码。操作系统直接支持内核线程。可以将任何应用程序编程为多线程。一个进程内支持应用程序内的所有线程。
内核维护整个流程以及流程中各个线程的上下文信息。内核调度是基于线程进行的。内核在内核空间中执行线程创建,调度和管理。内核线程通常比用户线程创建和管理慢。内核级线程的示例是Windows,Solaris。
死亡

内核级线程的优势

以下是内核级线程的不同优势-
内核可以在多个进程中同时调度来自同一进程的多个线程。 如果某个进程中的一个线程被阻止,则内核可以调度同一进程中的另一个线程。 内核例程本身可以是多线程的。

内核级线程的缺点

内核线程通常比用户线程创建和管理慢。 在同一进程中将控制权从一个线程转移到另一个线程需要将模式切换到内核。

线程控制块-TCB

线程控制块(TCB)可以定义为操作系统内核中主要包含有关线程信息的数据结构。存储在TCB中的特定于线程的信息将突出显示有关每个进程的一些重要信息。
请考虑以下有关TCB中包含的线程的要点-
线程标识-它是分配给每个新线程的唯一线程ID(tid)。 线程状态-它包含与线程状态(运行,可运行,非运行,死)相关的信息。 程序计数器(PC)-指向线程的当前程序指令。 寄存器集-它包含分配给线程进行计算的线程的寄存器值。 堆栈指针-指向进程中线程的堆栈。它包含线程范围内的局部变量。 指向PCB的指针-它包含指向创建该线程的进程的指针。  pcb

进程与线程之间的关系

在多线程中,进程和线程是两个密切相关的术语,它们的目标相同,即使计算机一次可以执行多项操作。一个进程可以包含一个或多个线程,但是相反,线程不能包含一个进程。但是,它们仍然是执行的两个基本单元。执行一系列指令的程序将同时启动进程和线程。
下表显示了进程和线程之间的比较-
<身体>
处理 线程
过程很繁重或需要大量资源。 线程是轻量级的,它比进程占用更少的资源。
进程切换需要与操作系统交互。 线程切换不需要与操作系统交互。
在多个处理环境中,每个进程执行相同的代码,但具有自己的内存和文件资源。 所有线程可以共享同一组打开的文件,子进程。
如果一个进程被阻塞,那么直到第一个进程被解除阻塞,其他进程才能执行。 当一个线程被阻塞并等待时,同一任务中的另一个线程可以运行。
不使用线程的多个进程会占用更多资源。 多线程进程使用更少的资源。
在多个进程中,每个进程都独立于其他进程进行操作。 一个线程可以读取,写入或更改另一个线程的数据。
如果父进程发生任何变化,则不会影响子进程。 如果主线程中有任何更改,则可能会影响该进程中其他线程的行为。
要与同级进程进行通信,进程必须使用进程间通信。 线程可以直接与该进程的其他线程通信。

多线程的概念

正如我们之前讨论的,多线程是CPU通过同时执行多个线程来管理操作系统使用的能力。多线程的主要思想是通过将一个进程划分为多个线程来实现并行性。用一种更简单的方式,可以说多线程是通过使用线程的概念来实现多任务的方法。
借助以下示例可以理解多线程的概念。

示例

假设我们正在运行一个进程。该过程可能是为了打开MS单词来写东西。在这种过程中,将分配一个线程来打开MS字,而将需要另一个线程来写。现在,假设我们要编辑某些内容,那么将需要另一个线程来执行编辑任务,依此类推。
下图帮助我们了解内存中如何存在多个线程-
多线程
在上图中,我们可以看到一个进程中可以存在多个线程,其中每个线程都包含自己的寄存器集和局部变量。除此之外,进程中的所有线程都共享全局变量。

多线程的优点

现在让我们看看多线程的一些优点。优点如下-
通信速度-多线程可提高计算速度,因为每个内核或处理器可同时处理单独的线程。 程序保持响应状态-允许程序保持响应状态,因为一个线程等待输入,而另一个线程同时运行GUI。 访问全局变量-在多线程中,特定进程的所有线程都可以访问全局变量,并且如果全局变量有任何更改,其他线程也可以看到。 资源利用-每个程序中运行多个线程可以更好地利用CPU,而CPU的空闲时间将减少。 数据共享-不需要每个线程都有额外的空间,因为程序中的线程可以共享相同的数据。

多线程的缺点

现在让我们看看多线程的一些缺点。缺点如下-
不适用于单处理器系统-多线程发现,与多处理器系统相比,单处理器系统的计算速度上难以实现性能。 安全性问题-我们知道程序中的所有线程共享同一数据,因此始终存在安全性问题,因为任何未知线程都可以更改数据。 增加复杂性-多线程处理会增加程序的复杂性,并且调试变得困难。 进入死锁状态-多线程可能导致程序具有达到死锁状态的潜在风险。 需要同步-需要同步以避免相互排斥。这会导致更多的内存和CPU利用率。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4