抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Kotlin – 一个线程可以有多少协程?一个协程代码块里可以有多少线程?

最近在面试的时候,总是会遇到这么个问题:一个线程可以有多少协程? 一个协程代码块里可以有多少线程?

当然这里是基于 kotlin 的协程,因为 kotlin 毕竟是受限于 dvm(jvm) 虚拟机的。在某些语言上,谈论这个问题没有意义:

参看:Google GDG – Kotlin协程的那些事儿 这里面有一个线程大概占用1m,一个协程大概占用几百 kb 的说明,算一波?边界怎么确定呢?

那么这个问题是什么解呢?

看下扔物线的解答:

扔大佬原话:

可能是哪篇讲了这两个问题的文章火了吧。
一个线程可以有无限多个协程;一个协程里的代码可以在无限多个线程里执行。
这都回答不上来,你需要重看协程训练营。

比如,你有个后台的 Dispatcher,它内部只有一个线程,那么这个线程会一直循环,任何协程都可以把 Dispatcher 设置成这个 Dispatcher,这样的话,线程就负责执行每个协程的代码。
同理,你在一个协程里执行个无限循环,在循环里用 withContext() 执行后台操作,那么每次进入后台的时候,具体负责执行代码的线程未必是相同的,这样就相当于这个协程在很多很多不同的线程里执行。

再升个级:

某个时间点上能有多少线程同时执行?

某个代码块上能有多少线程同时执行?

能答出来吗?想必更多的是内心模棱两可吧。

答案?我没答案,我也不确定是不是答案。

我的已知/感觉:

单核一次只能执行一个线程,多核可以同时执行多个线程。
在 jvm 中,不同线程的栈,是私有的,栈帧内容或许相同,但不会是同一个。

有问题的话,请使劲儿打我脸吧。反正也没什么本事。


0条评论

发表评论