【发布时间】:2022-01-06 09:52:01
【问题描述】:
我使用协程已经很长时间了,但我仍然不完全理解,为什么我需要更喜欢多线程协程而不是单线程协程。
当多线程协程的数量小于或等于物理线程数量时,我可以清楚地看到使用多线程协程的好处。但是如果我们的任务比物理线程多,为什么不宁愿只使用一个协程线程呢?
我将澄清最后一个问题:为什么 10 个线程的协程比只有一个线程的多个协程更好?
【问题讨论】:
-
我不得不承认我跟不上你的思路。首先,如果你的任务比物理内核少,你甚至不需要协程,原生线程就可以了。其次,当你有 more 个协程时它需要 less 个线程的想法,完全摆脱了我所有认真的尝试来理解你的角度。
-
@MarkoTopolnik 我也很困惑,但我的印象是 OP 假设协程以某种方式直接调度在 CPU 内核上。所以如果有足够多的协程来占据所有的核心,就不需要线程了。如果协程比核心少,那么 MT 可能会以某种方式......错误,我不知道,通过利用免费核心使协程运行得更快?当然,这根本没有任何意义。协程不是调度在 CPU 内核上,而是调度在线程上。然后在 CPU 内核上调度线程。
-
我知道协程是在线程中解决的,我只是觉得有些协程可以在一个线程中同时工作,不明白为什么我需要的线程多于一个。现在看来我明白它的工作原理了,乔佛里给了我一个很好的答案。
-
我猜你的困惑源于“并发”这个词的使用方式,它与“并行”是一个不同的技术术语。您可以在一个线程上拥有多个并发协程,但它们不会并行运行。并行执行只能在单独的 CPU 内核上进行。
标签: multithreading kotlin kotlin-coroutines