C ++ О каком пуле потоков говорит cppreference.com? - PullRequest
4 голосов
/ 26 апреля 2019

Я читал описание std :: async на cppreference.com.Первое описание гласит:

Функция шаблона async запускает функцию f асинхронно (потенциально в отдельном потоке, который может быть частью пула потоков ) и возвращает std ::будущее, которое в конечном итоге будет содержать результат вызова этой функции.

.[cppreference link]: std :: async

Что такое пул потоков cppreference.com , о котором идет речь?

Я прочитал стандартный черновикN4713 (C ++ 17) и нет упоминания о возможном использовании пула потоков.Я также знаю, что на данный момент в стандарте C ++ нет пула потоков.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

чисто гипотетический.cppreference пытается сказать вам, что стандарт разрешает выполнение задачи в пуле потоков (в отличие от запуска нового потока для его выполнения).И хотя стандарт не может явно разрешить это, нет ничего, что могло бы это запретить.

Я не знаю ни одной реализации, которая бы использовала пул потоков для std::async.

2 голосов
/ 26 апреля 2019

cppreference и стандарт C ++ на самом деле расходятся по этому поводу.cppreference говорит об этом (выделение и зачеркивание):

Функция шаблона async выполняет функцию f асинхронно ( потенциально опционально в отдельном потоке , который можетбыть частью пула потоков ).

В то время как стандарт C ++ гласит:

Если в * установлено launch::async1019 *, [std::async] вызывает [функцию f] , как будто в новом потоке выполнения ...

И это явно две разные вещи.

Только реализация Windows std::async использует пул потоков AFAIK, в то время как gcc и clang запускают новый поток для каждого вызова std::async (когда launch::async установлен в policy) и, следовательно, следуютстандарт.

Больше анализа здесь: https://stackoverflow.com/a/50898570/5743288

...