표준을 읽
출시 :: 비동기이 정책에서 설정되어있는 경우 [futures.async#3.1, 호출 INVOKE(DECAY_COPY(std::forward<F>(f)), DECAY_COPY(std::forward<Args>(args))...)
([func.require], [thread.thread.constr]) 에서 마치 비동기 호출 스레드에서 평가되는 DECAY_COPY에 대한 호출로 스레드 오브젝트가 나타내는 새로운 실행 스레드. [...] async()
이 async
발사 정책을 호출 할 때
그래서, 로-경우 규칙에 따라, 새로운 스레드를 양산해야합니다. 물론, 구현은 내부적으로 쓰레드 풀을 사용할 수 있지만, 일반적인 쓰레드 생성 오버 헤드를 제외하고, 특별한 '배고픈'것은 일어나지 않을 수 있습니다. 게다가, 스레드 로컬 환경의 초기화와 같은 일이 항상 일어나야합니다.
사실, 그 소리의 libC++ 트렁크 비동기 구현을 읽습니다 당신이 볼 수있는
unique_ptr<__async_assoc_state<_Rp, _Fp>, __release_shared_count>
__h(new __async_assoc_state<_Rp, _Fp>(_VSTD::forward<_Fp>(__f)));
VSTD::thread(&__async_assoc_state<_Rp, _Fp>::__execute, __h.get()).detach();
return future<_Rp>(__h.get());
, 더 '명시 적'스레드 풀은 내부적으로 사용되지 않습니다.
here도 읽을 수 있으므로 gcc 5.4.0을 사용하는 libstdC++ 구현은 일반 스레드를 호출하기 만하면됩니다.
구현에 따라 다릅니다. C++ 표준이나 특정 구현에 대해 묻고 있습니까? –
이상적으로는 표준의 보증을 원합니다. 하지만 당신은 그런 보장이 없다고 말하는 것 같아서, 나는 GCC의 libstdC++ (GCC 5.4, 그 것이 중요하다면)의 행동에 특별히 관심이있다. – Dreamer