Visual Studio 2015 的 std::thread 内部实现是否基于 PPL 的任务系统?
我的问题的背景是,将 std::thread 用于多个任务是否有意义,因为它们已经在公共线程池上平衡执行,还是通过 PPL 任务执行任务更好?
根据(which std::async implementations use thread pools?)这似乎是,但由于这个问题相当老,我想得到一个“官方”的答案。
Visual Studio 2015 的 std::thread 内部实现是否基于 PPL 的任务系统?
我的问题的背景是,将 std::thread 用于多个任务是否有意义,因为它们已经在公共线程池上平衡执行,还是通过 PPL 任务执行任务更好?
根据(which std::async implementations use thread pools?)这似乎是,但由于这个问题相当老,我想得到一个“官方”的答案。
是和否。
for std::thread
:
std::thread
构造函数(thread
file)调用
_Launch
(xthread
file)调用
_Thrd_startX
(xthread
file)调用
_Thrd_start
(cthread.c
file)调用
_beginthreadex
(cthread.c
file)。
我没有_beginthreadex
代码,但在文件atlbase.h
中,一些微软开发人员留下了以下评论:
// _beginthreadex calls CreateThread which will set the last error // value before it returns.
所以没有涉及PPL。
但是,在幕后std::async
调用concurrency::create_task
,然后它将使用基于 Windows API 的线程池。
我的问题的背景是,用于多个任务是否有意义
std::thread
......?
我使用了使用 PPL 的卡萨布兰卡。我还独立玩过 PPL。
我一点也不喜欢它的性能。我自己的线程池std::future
++实际上比对象std::promise
快了几倍。concurrency::task
与 C# 版本相比,它确实不足TPL
。如果性能对那个项目不重要,我只会使用它。