视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

进程、线程、纤程的区别?并发与并行?

  • 课程笔记
  • 问答交流

谈到进程和线程其实大家都比较清楚,谈到纤程很多同学不一定很清楚,底层其实给操作系统结合的非常紧密,特别是用户态与内核态的切换。

这节课重点主要会讲解以下5点:

1.进程

2.线程

3.纤程(这个是重点)

4.并发

5.并行

进程

进程是指在操作系统中能独立运行并作为资源分配的基本单位,由一组机器指令、数据和堆栈等组成的能独立运行的活动实体。

  •   我们给每一个进程去分配内存地址空间,并且各个进程的内存空间是不相互干扰的。
  •   我们要去完成CPU的时间片切换,就要记录之前的进程执行的位置,那么下次切换回来的时候,可以从记录的位置开始往下去执行,这就意味着它可以保存上一个进程在运行过程中的一个进度。

有了进程以后,就可以让我们的操作系统从宏观上去实现一个并发,其实实际上这就是通过CPU的时间片不断切换实现的。

线程

线程的出现是有一个前提的,就是进程这块存在一个问题,这个问题就是进程在一个时间内只能干一件事情,如果想同时去干多件事情的话,那么这个进程就没有办法去满足,譬如人可以在同一时间内进行“听”、“写”、“思考”,那进程要在同一时间内进行“听”、“写”、“思考”,这时就要把进程里面的多个子任务,划分成每一个线程。

一个进程里面会包含多个线程,每个线程会执行每个子任务,这样的话就可以把“听”、“写”“思考”,分别用三个线程去同步处理,然后再配合我们的多CPU核心的技术,就可以实现同时并行执行,达到一个并发效果。

线程的引入进一步提高了操作系统的并发性,线程能并发执行。

线程的优势

  1. 线程可以认为是轻量级的进程,所以线程的创建、销毁要比进程更快。
  2. 从性能上考虑,如果进程中存在大量的I/O处理,通过多线程能够加快应用程序的执行速度(通过CPU时间片的快速切换)。
  3. 由于线程是CPU的最小调度单元,所以在多CPU架构中能够实现真正的并行执行,每一个CPU可以调度一个线程。

多线程
多线程的运行模式,充分利用CPU,提高CPU的吞吐率。

纤程 (协程)

为了提高并发量,某些编程语言中提供了“纤程”(Fiber)的概念。比如Golang的goroutine、Erlang风格的actor,Java 语言虽然没有定义纤程,但仍有一些第三方库供选择,比如Quasar。

纤程可以理解为比线程颗粒度更细的并发单元。

纤程是以用户方式代码来实现的,并不受操作系统内核管理,所以内核并不知道纤程,也就无法对纤程实现调度,纤程是根据用户定义的算法来调度的。

因此,就内核而言,纤程采用了非抢占式调度方式,而线程是抢占式调度的。
一个线程可以包含一个或多个纤程。线程每次执行哪一个纤程的代码,是由用户来决定的。

所以,对于开发人员来说,使用纤程可以获得更大的并发量,但同时要面临自己实现调度纤程的复杂度。

评论交流
    说说你的看法