gpt4 book ai didi

c++ - 所以我给自己弄了一个线程池任务管理器系统。我应该从现在开始只使用它来创建所有线程吗?

转载 作者:行者123 更新时间:2023-11-28 01:04:11 28 4
gpt4 key购买 nike

所以我有一个线程池,它允许动态调整大小并使用任务范例。我想知道 - 当人们得到这样的东西时,他们会完全停止手动创建线程并一直使用任务吗?那么在我的类中仅使用线程池\任务执行器来创建线程是否很常见?


my thread pool基于 boost::asio::io_service并与 boost::packaged_task 一起工作.它只是 header ,拥有 boost 1.47.0,它工作所需的全部是 timer , my costume thread_groupthread_pool类(class)。开发这么小的东西很有趣,但现在我陷入了困境。

我的任务构造如下:

boost::shared_ptr< boost::packaged_task<int> > task(new boost::packaged_task<int>( boost::bind(calculate_the_answer_to_life_the_universe_and_everything, argument_int_value  )));

如果我想创建一个函数来返回任何东西,并且在其中有一些再次运行的计时器(例如文件索引器,如果用户在其中创建了任何新文件,则需要每 5 秒检查一次)一些文件夹)

所以例如我会:

void infinite_thread()
{
while(true)
{
timerForCaptureFame.restart();
do_stuff();
spendedTimeForCaptureFame = (int64_t)timerForCaptureFame.elapsed();
if (spendedTimeForCaptureFame < desiredTimeForCaptureFame)
boost::this_thread::sleep(boost::posix_time::milliseconds(desiredTimeForCaptureFame - spendedTimeForCaptureFame));
}
}

我会简单地将这个包装器创建到新线程中,代码如下

boost::thread workerThread(infinite_thread);

但现在我可以有任务所以它可以变成

boost::shared_ptr< boost::packaged_task<void> > task(new boost::packaged_task<void>(infinite_thread));
task_manager->post<void>(task);

我的任务管理器在经过一小段时间后会发现该线程不会自行关闭,并且通常会向其自身添加新线程以执行以保持该线程正常工作。

所以我真的很想知道是否通常的做法是让 thread_pool/task_pool 仅使用它(例如每个类一个)来创建线程,或者人们将任务与“纯”线程混合在一起?

最佳答案

没有明确的答案。可能有些事情看起来更适合常规线程,但不太适合 task 范例,例如需要在整个程序持续时间内持续运行的线程,或者可能比线程池更长寿的线程.如果它永远不会被带回池中,那么您不妨将它作为一个单独的事物来处理。

话又说回来,因为你已经有了线程池,你可能希望强制所有线程成为任务,即使它们是无限长的任务......但是当心 law of the instrument .似乎每项工作都是您的新游泳池/金锤子的任务/钉子。

关于c++ - 所以我给自己弄了一个线程池任务管理器系统。我应该从现在开始只使用它来创建所有线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240040/

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