我知道TBB
(线程构建块)声称拥有一个复杂的引擎,但从算法的角度来看:
如果我们(比如在Linux上)有一个工作队列,其N
个工作线程(POSIX线程,N
是核心数)和一个互斥的同步任务队列,每个工作线程然后在空闲时从队列中获取任务,还有一些同步调用,TBB
提供的还有什么,不计算好的C++
语法?我没有看到比贪婪地将任务分配到核心更好的算法。
答案 0 :(得分:15)
作为开发了自己的工作窃取调度程序的人,我可以说以下内容:
事实上,编写正确的调度程序并不困难。不幸的是,如果您想有效地执行它, 很难。一个有效的调度程序有效地排除了锁的使用(可能在非常具体的,明确指定的情况下),无锁的跨线程通信是一个痛苦的世界。
作为一个轶事,我实际上实现了一个调度程序,我基本上必须将现有算法复制到代码中,我仍然设法将几乎任何可以想象的竞争条件引入代码中。调试此代码是
的混合答案 1 :(得分:3)
不知道TBB的确切实施,我不能说它究竟提供了什么,但是因为你说“可以提供什么”......
其中,