知行编程网知行编程网  2022-11-24 13:00 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于一文带你读懂Python线程的相关知识,包括带你读懂案件背后的人心,以及Python线程这些编程知识,希望对大家有参考作用。


本文带你了解Python线程


Python线程

进程有很多优点,它提供了多道程序,可以提高计算机CPU的利用率。既然进程这么好,为什么还需要线程呢?其实细看的话,会发现这个过程还是有很多瑕疵的。

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

一个进程一次只能完成一项任务。如果要同时做两个或更多的任务,就必须开启多个进程来完成多个任务。

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

每个进程都有自己独立的空间,所以多个进程的创建和销毁比多线程更耗时,消耗更多的系统资源。

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


线程与进程的区别

可以归纳为以下4点:

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

2)通信:由于每个进程有自己独立的内存空间,所以进程间通信需要IPC,而进程内的数据对于多个线程来说是共享的,每个线程都可以访问,所以为了保证数据的一致性,需要使用锁。

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

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


线程的特点:

在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用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内核的支持,并且与Process的创建、销毁和调度大体相同。

3、用户级线程执行系统调用指令时,所属进程会被中断,而内核支持线程执行系统调用指令时,只有线程被中断。

4、在只有用户级线程的系统中,CPU调度仍然是基于进程的。一个运行进程中的多个线程由用户程序控制轮流运行;在内核支持线程的系统中,CPU调度则以线程为单位,由OS的线程调度器负责线程调度。

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


内核线程的优缺点:

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

缺点:由内核进行调度。


用户线程的优缺点:

优点:

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

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

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

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

与内核级线程相比,线程可以利用更多的表空间和堆栈空间。

同一个进程中只能同时运行一个线程。如果一个线程被系统调用阻塞,整个进程就会被挂起。此外,页面失效也会产生同样的问题。

缺点:

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享