Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 异步或线程池_C++_Multithreading_Asynchronous - Fatal编程技术网

C++ 异步或线程池

C++ 异步或线程池,c++,multithreading,asynchronous,C++,Multithreading,Asynchronous,有没有一个特别的原因使人们更喜欢std::async或std::thread而不是线程池 基本上,async是一个std::thread,它有一个结果和一个启动策略,这意味着异步的性能无论如何都会落后于池,因为创建线程的成本非常高 现在我很好奇,如果我非常频繁地启动任务,是否有理由使用异步而不是池? 对于长时间运行的任务,我肯定看到了它的优势,但对于小任务,我根本看不到异步的任何好处 即使对于更大的任务,我也更可能使用更大的线程池,并接受1或2个线程在固定时间内处于繁忙状态,因为我希望所有线程都

有没有一个特别的原因使人们更喜欢std::async或std::thread而不是线程池

基本上,async是一个std::thread,它有一个结果和一个启动策略,这意味着异步的性能无论如何都会落后于池,因为创建线程的成本非常高

现在我很好奇,如果我非常频繁地启动任务,是否有理由使用异步而不是池? 对于长时间运行的任务,我肯定看到了它的优势,但对于小任务,我根本看不到异步的任何好处

即使对于更大的任务,我也更可能使用更大的线程池,并接受1或2个线程在固定时间内处于繁忙状态,因为我希望所有线程都集中在一个点上


一般来说,我不理解为什么没有std::thread\u池实现,因为我看不出有多少理由在运行时启动线程(使用异步ot std::thread),如果我可以避免的话,因为产生新线程的成本很高。有人能给我一个合理的理由说明为什么我应该使用异步或者为什么标准中没有线程池吗?

可以创建线程,也可以使用线程池。或者它可以做一些完全不同的事情,这实际上取决于实现。
std::async
/
std::thread
/threadpool是正交的,它们可以用来实现彼此。问题是有缺陷的@Some programmer dude目前我了解到异步实际上被禁止使用线程池,MS违反了这一规则。@David Haim我知道std::thread是异步的基础,但是如果您经常使用线程,是否有理由生成线程而不是将其池化?实际上,合并线程不是C++中的规则(至少我知道)。我一直不明白,如果我可以使用一个池(至少如果线程不会运行很长一段时间),为什么我应该手动管理线程。根据一个老问题,默认启动策略允许使用池。在同一问题上,注意到“应该”一词是非规范性的,不要求在“应该”之后执行。因此,尽管不鼓励使用游泳池,但这并不是严格禁止的。