gpt4 book ai didi

c++ - 线程构建 block 上的任务

转载 作者:行者123 更新时间:2023-11-30 02:11:31 25 4
gpt4 key购买 nike

示例代码如下:

#include <iostream>
#include <list>
#include <tbb/task.h>
#include <tbb/task_group.h>
#include <stdlib.h>
#include <boost/thread.hpp>

using namespace tbb;

long fib(long a)
{
if (a < 2) return 1;

return fib(a - 1) + fib(a - 2);
}

class PrintTask
{
public:
void operator()()
{
std::cout << "hi world!: " << boost::this_thread::get_id() << std::endl;

fib(50);
}
};

int main(int argc, char** argv)
{
task_group group;

for (int i = 0; i < 100; ++i)
{
group.run(PrintTask());
}

group.wait();

return(0);
}

这里我正在计算一个大的斐波那契数列,只是为了模拟非阻塞计算。我预计这段代码会生成两个以上的线程(我的电脑是 Core2Duo),但只调用了第一个和第二个任务。这是被看中的?

最佳答案

是的,这是预期的行为。

TBB 是一个旨在并行化代码以提高性能的库。它不是为异步任务设计的——官方文档指出你应该使用另一个库,例如 pthreads,来完成这样的任务(或者 boost::thread,在你的情况下)。

为了获得最佳性能,拥有比内核更多的线程没有任何意义,因为这涉及到一些显着的开销(不仅是上下文切换,还包括刷新缓存之类的事情)。

编辑:您可以在 Tutorial 中阅读相关信息.具体来说,在第 1.2 节“好处”中指出

Intel® Threading Building Blocks targets threading for performance. Most general-purpose threading packages support many different kinds of threading, such as threading for asynchronous events in graphical user interfaces. As a result, general-purpose packages tend to be low-level tools that provide a foundation, not a solution. Instead, Intel® Threading Building Blocks focuses on the particular goal of parallelizing computationally intensive work, delivering higher-level, simpler solutions.

Intel® Threading Building Blocks is compatible with other threading packages. Because the library is not designed to address all threading problems, it can coexist seamlessly with other threading packages.

关于c++ - 线程构建 block 上的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3396758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com