- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找到一种情况,将多线程更改为协程将加快受影响代码部分的处理速度。据我发现,与线程相比,协程使用的 CPU 和堆空间更少,但我仍然找不到协程比线程更快的情况。虽然我知道协程创建和上下文切换比线程的相应操作便宜得多,但我在速度差异方面得到了难以察觉的结果(如果不测量线程创建,两种情况将完全相同)。
那么,是否有可能找到协程比线程执行速度更快的情况?
最佳答案
需要注意的一件事是,当您拥有大量协程时,协程会非常优越。你可以毫不犹豫地创建和执行数千个协程,如果你试图通过线程来做到这一点,那么与线程相关的所有开销可能会很快杀死主机。因此,这使您能够考虑大规模并行化,而无需管理工作线程和可运行对象。它们还可以轻松实现异步计算模式,而使用基本线程(如 channel 和参与者)实现这些模式将非常笨拙。
关于您的问题超出了范围,但仍然值得注意的是该概念的通用性,因为协程的用例不仅限于异步计算。协程的核心是可挂起的函数,例如,它还可以启用生成器,就像您在 Python 中拥有的那样,您不会立即将其连接到异步编程。
关于multithreading - 协程如何比线程更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47092460/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!