再設計されたExecutorとScheduler

Comments on N3785 - Executors and Schedulers - std-proposals

C++14後のConcurrency TSに提案されているExecutorとSchedulerを、Boost.Thread作者のVicenteさんが再設計しています。その実装は、Boost.Threadのリポジトリで、実験的に行われています。

私が提出した問題点も全て改善されていて(提案者は見てるけど、Vicenteさんは見てないと思う)、標準C++らしい、Boostらしい設計になっています。

具体的な変更点:

  • Closureがstd::functionではなく、テンプレートでCallableな関数オブジェクトを受け取るようになった。
  • タスクの追加がadd()ではなくsubmit()になった。
  • デフォルトexecutorがなくなった。簡単に実装できるのでいらない、と。
  • デフォルトexecutorがなくなって仮想関数も必要なくなったので、継承階層がなくなった。
  • スレッドプールに、at_thread_entryイベントを追加。その名の通り、スレッド開始時に呼ばれる関数を指定できる。現在使用しているexecutorやデフォルトexecutorは、この機構を使用して簡単に実装できる。

現状、スレッドプールにアロケータを指定できない問題が残っていますが、私がコメントしたところ「とくに問題なくアロケータオプションを追加できるだろう」と返答がありました。

この改善案は、メーリングリスト上では提案者とまだ意見が交わされていないので、どうなるかはまだわかりません。

参考

C++14規格レビュー勉強会で、私がレビューに使用した資料は以下になります: