Valentine 转载请标明出处。
1、早期的计算机只能接受指令然后执行相应的操作,而且它不会存储指令,当用户输入指令的时候计算机会处于一个非工作状态。所以很多情况下,计算机都会处于一个等待状态,这就没有充分利用计算机本身的资源。
2、然后就产生批处理操作系统,用户把执行的指令写到磁带上,让计算机去读取这个磁带去执行相应的程序,并且把输出结果输出到另外个磁带上,这就是我们的批处理操作系统的演变过程。
3、虽然这种方式大大提升了计算机的利用率,但是在这种情况下会遇到一个问题,这个批处理操作系统中,譬如存在:A、B、C、D、E、F、G、H、I、J十个指令,在执行A指令,执行到一半的时候做了一些IO操作阻塞了,因为这时CPU会等到这个A指令执行完才会执行下一个指令,导致另外的指令没有办法往下走,这时候就会造成CPU资源的一个等待,使得CPU资源没有办法充分利用。这时我们就想要设计一个东西,可以切换执行,就是说如果前面的指令存在一个阻塞的话,就让这个CPU的资源,就是这个时间片让给其他指令去执行。
4、因为这些指令是直接一次性加载到内存里面,如果我们需要去执行指令切换的话,就势必要将相应的指令进行隔离,但是之前的批处理操作系统,是没有办法进行指令隔离的,所以这就设计了进程:
1、我们给每一个进程去分配内存地址空间,并且各个进程的内存空间是不相互干扰的。
2、我们要去完成CPU的时间片切换,就要记录之前的进程执行的位置,那么下次切换回来的时候,可以从记录的位置开始往下去执行,这就意味着它可以保存上一个进程在运行过程中的一个进度。
这就是进程的两个最基本的要素。
5、有了进程以后,就可以让我们的操作系统从宏观上去实现一个并发,其实实际上这就是通过CPU的时间片不断切换实现的。所以对于单核的CPU在任意一个时刻只会有一个任务去执行,通过切换任务的方式并行执行,这时我们进程初现了。
6、那么在进程之后我们为什么有一个线程呢?
线程的出现是有一个前提的,就是进程这块存在一个问题,这个问题就是进程在一个时间内只能干一件事情,如果想同时去干多件事情的话,那么这个进程就没有办法去满足,譬如人可以在同一时间内进行“听”、“写”、“思考”,那进程要在同一时间内进行“听”、“写”、“思考”,这时就要把进程里面的多个子任务,划分成每一个线程。一个进程里面会包含多个线程,每个线程会执行每个子任务,这样的话就可以把“听”、“写”“思考”,分别用三个线程去同步处理,然后再配合我们的多CPU核心的技术,就可以实现同时并行执行,达到一个并发效果,这就是我们的线程
总结:我们学习多线程就应该先了解它的发展历史,需要知道它每一个演进的过程,要达到的目的和效果,线程让我们真正意义上实现了并行执行,这就是进程和线程这两个概念的一个发展。
网友评论