mat*_*ots 7 c++ multithreading go
特别是,我在C++中有一些阻塞队列,我想等到其中任何一个都有一些我可以弹出的项目.
我能想到的唯一机制是为每个从其输入队列弹出的队列生成一个单独的线程,并将其提供给原始线程可以等待的主队列.
生成N个新线程然后每次想要从一组队列弹出时都杀掉所有线程似乎有点资源.
Golang是否实现了一些我可以在自己的C++代码中实现的更优雅的机制?
我不一定会说Go的select实现是优雅的,但我认为它以自己的方式很漂亮并且相当优化.
selects与一个非默认情况sudogs,就像轻量级的goroutine引用(可以有很多sudogs用于相同的goroutine),允许快速跳进goroutine堆栈gopark机制来阻止自身,从而允许对信号进行有效的解除停放selectgoroutine的程序计数器进入触发的案例处理函数在实施过程中没有单一的总体突破性想法,但您真的很感激每个步骤都经过精心修改,以便快速,高效并与渠道概念完美结合.因此,select用另一种语言重新实现Go的语句并不是很容易,除非你至少先拥有该chan结构.
您可以查看其他语言中可用的重新实现,其中重新实现了不同程度的相似性和有效性.如果我不得不select用另一种语言从头开始重新实现,我可能会首先尝试一个共享的信号量,如果不能正常工作,请切换到一个较小的,一点点睡觉然后检查随机顺序战略.
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |