必备的理论基础: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把其余进程当作病毒干死)一个车间的不一样流水线式协同工做的关系(同一个进程的线程之间是合做关系,是同一个程序写的程序内开启动,迅雷内的线程是合做关系,不会本身干本身)