感觉从控制流的角度理解这几个概念是最方便的,控制流就是现在做什么、接下来做什么、再接下来做什么。。。
当然要精准把握还是要从寄存器上下文、内核态和用户态的角度来看
- 同步 意思就是只有一个控制流
- 异步 意思就是至少有两个控制流
- 阻塞、非阻塞 这个词多出现在 Linux 的 IO 模型中,是专有名词,不能望文生义,一定要了解那几个 IO 模型实际做了什么,也许这里面还有一些历史因素吧,感觉能不用这两个词语就不用这两个词语
- 中断、轮询 这两个词我在 CPU 相关的文章中经常见到,描述键盘输入打断 CPU 原有的控制流、CPU 周期性的访问某段地址空间,两种方式给 CPU 的压力不一样。看到很多文章说什么“中断是一种硬件轮询,中断是不断的检测某个标志位”,但是我还是觉得两者完全不一样,对 CPU 而言,中断是被动的,轮询是主动的
- 多线程、协程 前者是系统层面的,后者是语言层面的。之前这里面我有个误区,我一直认定一个线程才能代表一个控制流,协程是一个控制流里的魔法操作,现在不这么想了,之后多写写代码再加深理解
在 v 站上搜索帖子,有 V 友说协程分为有栈协程和无栈协程(似乎协程和协程还都不太一样),也有 v 友说要了解协程还是先从 EventLoop 看起,我感觉协程和闭包应该有关系,要调度各个控制流就需要保存上下文。
今天一早的搜索,走过最多的弯路是判断不同人对这些概念的理解,尤其是各式的比喻,目前对这些概念有了一个稳定自洽的印象,接下来写代码看看原理看有没有什么新的理解
希望这段能给对这些概念比较模糊的 v 友带来点启发,然后对这些概念有更准确理解的前辈还望多赐教
