![]() |
1
3
英特尔的tbb库是开源的,所以我看了一下……
看起来像
为平原
注意,至少有两件有趣的事情(对我来说)与此有关:
用一粒盐来做这个分析…我用于此分析的源可能有点旧(实际上来自concurrent_queue_v2.h和.cpp),因为最近的concurrent_queue具有不同的API-没有
|
![]() |
2
2
与
你可以看到如果你只有一个CPU,这会是多么糟糕——生产者线程将无法推动,从而停止消费者旋转,直到消费者的 time quanta 加上A的开销 context switch .显然是个错误。 对于多个CPU,如果操作系统选择(或强制)生产者线程在不同的CPU上运行,这可能会更好。这是 spin-lock -直接建立在特殊处理器指令上的同步原语,如 compare-and-swap 或 load-linked/store conditional 通常在操作系统内部用于在中断处理程序和内核其余部分之间进行通信,并构建更高级别的构造,如 semaphores .
用阻塞
但是选择很简单-
总是睡眠等待
,即做阻塞
希望这有点帮助。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |