线程理论

一 什么是线程

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

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

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

  流水线的工作需要电源,电源就相当于cpu

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

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

  例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。

二 纠正概念

在这呢我就要给大家纠正一个概念了。

1 以前咱们说进程怎么怎么运行 ,那是在没有学习线程的时候不得已才那么说。进程根本就不是一个执行单位,进程其实是一个资源单位。

2 以后说进程,在内存当中有一块隔离的空间, 专门存这个进程运行过程当中一些相关的数据。

3 我们之前说进程申请空间,然后运行代码,那运行代码的过程我们就抽出来了叫线程的执行 。

4 每个进程内都自带一个线程,线程才是cpu上的执行单位,之前说切换实际切换到的执行的是进程里面的线程。cpu会在多个线程间切换。

二 如果把操作系统当成一个工厂

操作系统 ===》工厂

进程 ===》车间

线程 ===》流水线 (需要电源)

cpu ===》电源

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

如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个即cpu(单核cpu)

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

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

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

故事开始:

如果把咱们的操作系统比喻为一个工厂, 每在操作系统中启动了一个进程,就相当于在工厂内开了一个车间,比如我起了一个进程,相当于在这个工厂内开了一个造方向盘的车间。又启动了一个车间来了一个造发动机的车间。你造一个车间要干什么事情。

你跟着我想。

1 造车间需要干什么? 各种各样的原材料

比如这个造方向盘的车间。首先你造一个房子,需要塑料盒橡胶。。。专门放到这个造方向盘的车间。造方向盘一些相关的原材料丢进去吧,如果让你去造一个工厂的话,造车门造发动机的。。。,

2 进程其实是一个资源单位,一个车间独占一份空间

如果没有车间的话划分是不是原材料全部多混在了一起了 。我在这个工厂内是不是就是为了把车间隔离开,造方向盘的就专门放造方向盘的材料。造车间目的就是为了把一块资源根别人隔离开。咱们的车间刚刚比喻为了进程。造一个进程就是在操作系统中开了一个车间,车间里面放的各种各样的资源,进程其实其实是一个资源单位(或者说资源集合)。

其实是为了告诉你一件事情,qq进程相关的数据占了独一份空间,world进程相关的数据是占了独一份空间。

3 造车间的目的,其实具体的一条条流水线(线程)负责生产零件。

说到这,接着再想,造好车间的目的是为了划分一块资源,往里面丢入一些原材料,相当于一堆数据丢进去了,丢进去是为了好看的吗?

造车间的本质是为了干什么事情?是为了让车间运作,那一个车间运作必须车间内至少要有一条流水线,也就是咱们刚刚所说的每一个进程内,都应该至少有一个线程。就是咱们车间内的流水线。那这个流水线,他在运作的过程中就是取来造方向盘的一个个数据进程加工处理就行了。

4 每个流水线需要电运转起来,相当于每个线程需要cpu去运行。

5 结论

如果把操作系统比喻为一做工厂

在工厂内没造出一个车间 ===》 启动一个进程

每个车间内至少有一条流水线 ===》 每个进程内至少有一个线程。

进程之间是竞争关系,线程之间是协作关系?(了解)

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

三 在程序当中应该如何看待进程和线程?

1 右键运行干了个什么事情?

产生了一个进程---》启动进程的目的就是开了一个内存空间以及方便方便操作系统调度---》开空间的目的是为了存进程相关的数据。进程其实指的是一个资源单位或者说资源集合=》开了空间之后里面放了代码,而代码需要去运行=》而代码的运行过程则是线程。

用一个比喻的说法:进程是线程的容器

线程 = 代码的运行过程

进程 = 线程+各种资源(比如内存空间等)

进程内的线程运行就像车间内的一条条流水线运行。

四 再次论述一下 把教室比喻为车间:

1 具体例子。

教室 --》车间 --- 》进程

人干活 --》流水线----》 线程

干活的工具 --》电源 ----》cpu

如果把教室想象成一个车间,启动进程就是把教室准备好了,然后我要干具体的活了就是运行代码被,那也就是谁可以干活啊,人去干活被,人是不是需要干活的工具干活啊,那人就相当于线程,干活的工具就相当于cpu。干活用的一些原料(水泥螺丝)就是这个教室提供的也就是该进程提供的。

人拿着工具干活就相当于线程拿着cpu运行,而需要的一些水泥各种原料从这个教室里面拿也就是从进程里面拿。

五 作为开发的常识

1 进程的启动和销毁(空间开始和释放)

只要一说一个进程启动了,那你知道了一个事情,是关于这个程序的一块空间造好了。

只要一说进程销毁了,那你也知道了一个事情,是关于这个程序的空间释放了。

2 线程的启动和销毁(进程里的一段代码运行起来了,进程里的一段代码运行结束)

六 线程与进程的区别是什么?

线程==》单指代码的执行过程

进程==》资源的申请与销毁的过程

ps: 但是同一进程下可不可以开多个线程? 就如同一个车间可不可以开多条流水线,答案是yes。

进程vs线程

1 、内存共享or隔离

多个进程内存空间彼此隔离。

同一进程下的多个线程共享该进程内的数据。

2 、创建速度

造线程的速度,要远远快于造进程。

posted @ 2019-09-16 04:56  张明岩  阅读(243)  评论(0编辑  收藏  举报