ashes Asked:2024-01-24 13:20:03 +0800 CST2024-01-24 13:20:03 +0800 CST 2024-01-24 13:20:03 +0800 CST Stackful 和 Stackless 协程 772 两种类型的协程有什么区别?Go 中实现了什么方法?(goroutine 是什么类型) многопоточность 1 个回答 Voted Best Answer Pak Uula 2024-01-24T19:51:51+08:002024-01-24T19:51:51+08:00 比较 goroutine 和 coroutines 就像比较 hot 和 high。它们是为不同的目的而设计的,并且设计方式也不同。 C++ 中的协程旨在将异步算法和生成器编写为函数。C++ 中的协程返回值。这是与 goroutine 的根本区别。协程中的所有内容都旨在返回值。co_yield创造co_return意义,co_await接受意义。从某种意义上说,这是糟糕的旧setjmp/longjmp编译器对局部变量存储的支持。 Goroutines 旨在实现轻量级线程,其切换不需要访问内核。Goroutines不返回值。因此,在 Go 中既没有yield, 也没有await。需要显式地组织 goroutine 通过通道传输数据。 我不会争论哪个更好的话题 - 带yield/wait或带通道的轻量级线程的异步算法。就我个人而言,我更喜欢线程/goroutines,因为我更容易以参与者之间交换数据的方式思考,而不是将功能切片为异步面条。 回到你的问题——考虑 goroutine stackfull。
比较 goroutine 和 coroutines 就像比较 hot 和 high。它们是为不同的目的而设计的,并且设计方式也不同。
C++ 中的协程旨在将异步算法和生成器编写为函数。C++ 中的协程返回值。这是与 goroutine 的根本区别。协程中的所有内容都旨在返回值。
co_yield
创造co_return
意义,co_await
接受意义。从某种意义上说,这是糟糕的旧setjmp
/longjmp
编译器对局部变量存储的支持。Goroutines 旨在实现轻量级线程,其切换不需要访问内核。Goroutines不返回值。因此,在 Go 中既没有
yield
, 也没有await
。需要显式地组织 goroutine 通过通道传输数据。我不会争论哪个更好的话题 - 带
yield
/wait
或带通道的轻量级线程的异步算法。就我个人而言,我更喜欢线程/goroutines,因为我更容易以参与者之间交换数据的方式思考,而不是将功能切片为异步面条。回到你的问题——考虑 goroutine stackfull。