asynchronous - 将 TBB 用于非并行任务

标签 asynchronous threadpool tbb

我想使用 TBB 获得线程池行为。但是每当我阅读有关 TBB 的文档时,他们总是谈论 parallel-for、parallel-dowhile 等。相比之下,我需要一个主线程将任务分配给线程池,以便这些任务将“自行”执行 - 执行任务异步。这里的任务可以是 GUI 的事件处理。

TBB 任务调度程序是否适合这种行为?我从任务调度程序中得到的印象是,只有当我的任务可以分解并彼此并行执行时,它才有用。

最佳答案

从 3.0 版本开始,TBB 支持异步执行任务。为此,一种特殊的工作提供方法tbb::task::enqueue()加入。不像 tbb::task::spawn() ,此方法保证即使原始线程从未进入诸如 wait_for_all() 之类的任务调度方法,也将执行入队任务。 .
task::enqueue() 的简短用法示例:

class MyTask : public tbb::task {
    /*override*/ tbb::task* execute() {
        // Do the job
        return NULL; // or a pointer to a new task to be executed immediately
    }
};

MyTask* t = new (tbb::task::allocate_root()) MyTask();
tbb::task::enqueue(*t);
// Do other job; the task will be executed asynchronously

正如@JimMishell 在评论中提到的,在“设计模式”中可以找到如何使用它来处理 GUI 事件的示例;并且该方法的正式描述可以在引用手册中找到(两者都参见 TBB documentation)。

关于asynchronous - 将 TBB 用于非并行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301827/

相关文章:

java - 为什么 ForkJoinPool.commonPool().execute(runnable) 需要更多时间来运行线程

multithreading - ASP.NET 网站中出现意外的第二个 AppDomain

c++ - tbb 并发 HashMap 作为结构的成员

c++ - 英特尔 TBB 集成问题 - Google 测试项目中的 VS2013 编译错误

javascript - 在 Internet Explorer 中更改 onchange 处理程序中的 tabindex 时出现奇怪的行为

c# - 使用 MVVM 在运行时绑定(bind)失败

在 ICS 上几分钟未调用 Android AsyncTask

c++ - 基于 Qt 的 CD 开膛手的线程构建 block (TBB)?

c# - 异步任务的有效速率限制(每个时间间隔执行 N 次)

c - 读取/预读系统调用的线程安全