multithreading - 了解协程
问题描述
来自维基百科的段落比较与线程状态:
...这意味着协程提供并发性但不提供并行性...
我知道协程比线程轻,不涉及上下文切换,没有关键部分,因此也不需要互斥锁。令我困惑的是,它的工作方式似乎无法扩展。根据维基百科,协程提供并发,它们协同工作。带有协程的程序仍然是顺序执行指令,这和单核机器上的线程完全一样,但是多核机器呢?在哪些线程上并行运行,而协程与单核机器上的工作方式相同。
我的问题是协程如何在多核机器上比线程执行得更好?
解决方案
...多核机器呢?...
协程是一种并发模型(其中两个或多个有状态的活动可以同时进行),但不是并行模型(其中程序将能够使用比单个传统 CPU 更多的硬件资源核心可以提供)。
线程可以彼此独立运行,如果您的硬件支持它(即,如果您的机器有多个内核),那么两个或多个线程可以在同一时刻执行它们的独立活动。
但是,根据定义,协程是相互依赖的。一个协程只有在被另一个协程调用时才会运行,调用者会被挂起,直到当前协程回调它。一组协程中只有一个协程可以在任何给定时刻实际运行。
推荐阅读
- go - 如何在 Go 中不创建临时字节片的情况下从连接中读取数据
- python - 如何使用 Selenium 选择不同行中的所有元素
- c# - Firebird 无法完成对主机的网络请求
- php - 将图像发送到我的服务器的方式有哪些?
- python - 如何在 Tkinter Canvas 中同时移动多个对象?
- c# - json 将反斜杠替换为双引号
- python-3.x - gdalwarp 和 gdal_translate 给出不同的结果
- python - 无法通过 Python SDK 在 BigQuery 中安排查询
- python - 如何在 pygame 中编写一个绘制一个或多个对象的函数?
- python - 在 pytorch 中训练多输出回归模型