最近在面试的时候,总是会遇到这么个问题:一个线程可以有多少协程? 一个协程代码块里可以有多少线程?
当然这里是基于 kotlin 的协程,因为 kotlin 毕竟是受限于 dvm(jvm) 虚拟机的。在某些语言上,谈论这个问题没有意义:
参看:Google GDG – Kotlin协程的那些事儿 这里面有一个线程大概占用1m,一个协程大概占用几百 kb 的说明,算一波?边界怎么确定呢?
那么这个问题是什么解呢?
看下扔物线的解答:
扔大佬原话:
可能是哪篇讲了这两个问题的文章火了吧。
一个线程可以有无限多个协程;一个协程里的代码可以在无限多个线程里执行。
这都回答不上来,你需要重看协程训练营。
比如,你有个后台的 Dispatcher,它内部只有一个线程,那么这个线程会一直循环,任何协程都可以把 Dispatcher 设置成这个 Dispatcher,这样的话,线程就负责执行每个协程的代码。
同理,你在一个协程里执行个无限循环,在循环里用 withContext() 执行后台操作,那么每次进入后台的时候,具体负责执行代码的线程未必是相同的,这样就相当于这个协程在很多很多不同的线程里执行。
再升个级:
某个时间点上能有多少线程同时执行?
某个代码块上能有多少线程同时执行?
能答出来吗?想必更多的是内心模棱两可吧。
答案?我没答案,我也不确定是不是答案。
我的已知/感觉:
单核一个时间片只能执行一个线程,多核可以在一个时间片同时执行多个线程。
在 jvm 中,不同线程的栈,是私有的,栈帧内容或许相同,但不会是同一个。
有问题的话,请使劲儿打我脸吧,反正也没什么本事 ~
本站由以下主机服务商提供服务支持:
0条评论