python中的线程和进程,python多线程详解

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: