6

今天一早的搜索,终于对同步、异步、阻塞、非阻塞、中断、轮询、多线程,协程这几个概...

 1 year ago
source link: https://www.v2ex.com/t/923159
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

今天一早的搜索,终于对同步、异步、阻塞、非阻塞、中断、轮询、多线程,协程这几个概念有了理解

  adian · 10 小时 2 分钟前 · 1420 次点击

感觉从控制流的角度理解这几个概念是最方便的,控制流就是现在做什么、接下来做什么、再接下来做什么。。。

当然要精准把握还是要从寄存器上下文、内核态和用户态的角度来看

  • 同步 意思就是只有一个控制流
  • 异步 意思就是至少有两个控制流
  • 阻塞、非阻塞 这个词多出现在 Linux 的 IO 模型中,是专有名词,不能望文生义,一定要了解那几个 IO 模型实际做了什么,也许这里面还有一些历史因素吧,感觉能不用这两个词语就不用这两个词语
  • 中断、轮询 这两个词我在 CPU 相关的文章中经常见到,描述键盘输入打断 CPU 原有的控制流、CPU 周期性的访问某段地址空间,两种方式给 CPU 的压力不一样。看到很多文章说什么“中断是一种硬件轮询,中断是不断的检测某个标志位”,但是我还是觉得两者完全不一样,对 CPU 而言,中断是被动的,轮询是主动的
  • 多线程、协程 前者是系统层面的,后者是语言层面的。之前这里面我有个误区,我一直认定一个线程才能代表一个控制流,协程是一个控制流里的魔法操作,现在不这么想了,之后多写写代码再加深理解

在 v 站上搜索帖子,有 V 友说协程分为有栈协程和无栈协程(似乎协程和协程还都不太一样),也有 v 友说要了解协程还是先从 EventLoop 看起,我感觉协程和闭包应该有关系,要调度各个控制流就需要保存上下文。

今天一早的搜索,走过最多的弯路是判断不同人对这些概念的理解,尤其是各式的比喻,目前对这些概念有了一个稳定自洽的印象,接下来写代码看看原理看有没有什么新的理解

希望这段能给对这些概念比较模糊的 v 友带来点启发,然后对这些概念有更准确理解的前辈还望多赐教


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK