CPython解释器的进程和线程概述

必备的理论基础:python

#一 操做系统的做用:
    1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
    2:管理、调度进程,而且将多个进程对硬件的竞争变得有序

#二 多道技术:
    1.产生背景:针对单核,实现并发
    ps:
    如今的主机通常是多核,那么每一个核都会利用多道技术
    有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再从新调度,会被调度到4个
    cpu中的任意一个,具体由操做系统调度算法决定。
    
    2.空间上的复用:如内存中同时有多道程序
    3.时间上的复用:复用一个cpu的时间片
       强调:遇到io切,占用cpu时间过长也切,核心在于切以前将进程的状态保存下来,这样
            才能保证下次切换回来时,能基于上次切走的位置继续运行

 

一 什么是进程

    进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。程序员

    举例(单核+多道,实现多个进程的并发执行):算法

    egon在一个时间段内有不少任务要作:python备课的任务,写书的任务,交女友的任务,王者荣耀上分的任务,  多线程

    但egon同一时刻只能作一个任务(cpu同一时间只能干一个活),如何才能玩出多个任务并发执行的效果?并发

    egon备一会课,再去跟李杰的女友聊聊天,再去打一会王者荣耀....这就保证了每一个任务都在进行中.spa

 

程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。操作系统

举例:线程

想象一位有一手好厨艺的计算机科学家egon正在为他的女儿元昊烘制生日蛋糕。设计

他有作生日蛋糕的食谱,code

厨房里有所需的原料:面粉、鸡蛋、韭菜,蒜泥等。

在这个比喻中:

    作蛋糕的食谱就是程序(即用适当形式描述的算法)

    计算机科学家就是处理器(cpu)

    而作蛋糕的各类原料就是输入数据

   进程就是厨师阅读食谱、取来各类原料以及烘制蛋糕等一系列动做的总和

 

如今假设计算机科学家egon的儿子alex哭着跑了进来,说:XXXXXXXXXXXXXX

科学家egon想了想,处理儿子alex蛰伤的任务比给女儿元昊作蛋糕的任务更重要,因而

计算机科学家就记录下他照着食谱作到哪儿了(保存进程的当前状态),而后拿出一本急救手册,按照其中的指示处理蛰伤。这里,咱们看处处理机从一个进程(作蛋糕)切换到另外一个高优先级的进程(实施医疗救治),每一个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完以后,这位计算机科学家又回来作蛋糕,从他
离开时的那一步继续作下去。

须要强调的是:同一个程序执行两次,那也是两个进程

二  什么是线程  

  在传统操做系统中,每一个进程有一个地址空间,并且默认就有一个控制线程

  线程顾名思义,就是一条流水线工做的过程,一条流水线必须属于一个车间,一个车间的工做过程是一个进程

      车间负责把资源整合到一块儿,是一个资源单位,而一个车间内至少有一个流水线

      流水线的工做须要电源,电源就至关于cpu

  因此,进程只是用来把资源集中到一块儿(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。

 

  多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,至关于一个车间内有多条流水线,都共用一个车间的资源。

      例如,北京地铁与上海地铁是不一样的进程,而北京地铁里的13号线是一个线程,北京地铁全部的线路共享北京地铁全部的资源,好比全部的乘客能够被全部线路拉。

 

线程的建立开销小

建立进程的开销要远大于线程?

若是咱们的软件是一个工厂,该工厂有多条流水线,流水线工做须要电源,电源只有一个即cpu(单核cpu)

一个车间就是一个进程,一个车间至少一条流水线(一个进程至少一个线程)

建立一个进程,就是建立一个车间(申请空间,在该空间内建至少一条流水线)

而建线程,就只是在一个车间内造一条流水线,无需申请空间,因此建立开销小

 

进程之间是竞争关系,线程之间是协做关系?

车间直接是竞争/抢电源的关系,竞争(不一样的进程直接是竞争关系,是不一样的程序员写的程序运行的,迅雷抢占其余进程的网速,360把其余进程当作病毒干死)一个车间的不一样流水线式协同工做的关系(同一个进程的线程之间是合做关系,是同一个程序写的程序内开启动,迅雷内的线程是合做关系,不会本身干本身)

相关文章
相关标签/搜索