SlideShare a Scribd company logo
1 of 14
Download to read offline
C++14 Concurrency TS

ExecutorとScheduler

株式会社ロングゲート
高橋 晶(Akira Takahashi)
faithandbrave@longgate.co.jp
2013/12/14(土) C++14規格レビュー勉強会 #2
はじめに
•

この発表は、C++14後のConcurrency TSに予定されている、
ExecutorとSchedulerのレビュー資料です。

•

提案文書:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3731.pdf

•

いろいろと設計が不十分なようなので、その点を重視してレビューする。

•

大きな懸念点はすでに、鈴木一生さんを通して提案者にフィードバッ
ク済み。改善案を検討してもらっている。
提案の概要
•
•

標準ライブラリに、executorとschedulerのクラス群を導入する。
executorとは、複数タスクの実行を管理するクラス。

•

スレッドプールを含む。

•
•

schedulerとは、executorにタスクの時間指定実行が付いたもの。

•

規格にそのまま入れるようなProposal Wordingの形にはまだない。
(たとえば、名前空間が記載されていない)

これらのクラスは、Googleが社内で使っていたexecutorと、
Microsoftのschedulerを合わせたもの。
追加が予定されているヘッダ
executorの抽象クラス。
<executor>

<thread_pool>
<serial_executor>
<loop_executor>
<inline_executor>

•
•

class executor;
class scheduled_executor : public executor;
スレッドプールのクラス。
class thread_pool : public scheduled_executor;
他のexecutorをFIFO実行するアダプタ。
class serial_executor : public executor;
シングルスレッドで使うexecutor。
class loop_executor : public executor;
キューイングせずにスレッドで実行するexecutor。
class inline_executor : public executor;

ヘッダファイル多すぎじゃないですかね。
本来このような分割は望ましいですが、標準ライブラリではそうなっ
ていない。1ライブラリ1ヘッダにするのがよい。
executorクラスのインタフェース
class executor {
public:
virtual ~executor();
virtual void add(function<void()> closure) = 0;
virtual size_t num_pending_closures() const = 0;
};

•

このクラス自体は、何もしない単なるインタフェースクラス。

•

add()メンバ関数はタスクの追加。

•

num_pending_closures()は実行待機中のタスク数を返す。
scheduled_executorクラスの
インタフェース
class scheduled_executor : public executor {
public:
…
virtual void add_at(const chrono::system_clock::time_point& abs_time,
function<void()> closure) = 0;
virtual void add_after(const chrono::system_clock::duration& rel_time,
function<void()> closure) = 0;
};

•

このクラス自体も同様に、何もしない単なるインタフェースクラス。

•

add_at()メンバ関数は、特定の日時に実行予約するタスクの追加。

•

add_after()メンバ関数は、特定の時間経過したら実行するタスクの追加。
thread_poolクラス
class thread_pool : public scheduled_executor {
public:
explicit thread_pool(int num_threads);
~thread_pool();
…
};

•

スレッドプール。指定された数のスレッドを使いまわして、
タスクを実行する。

•

コンストラクタでスレッド数を指定してプール。(size_tにすべし)

•

デストラクタで全てのタスクが完了するまで待機。
serial_executorクラス
class serial_executor : public executor {
public:
explicit serial_executor(executor* underlying_executor);
virtual ~serial_executor();
executor* underlying_executor();
…
};

•

元となる他のexecutorを、FIFO順に処理することを保証するアダプタ。
loop_executorクラス
class loop_executor : public executor {
public:
loop_executor();
virtual ~loop_executor();
void loop();
void run_queued_closures();
bool try_run_one_closure();
void make_loop_exit();
…
};

•

シングルスレッドでFIFO実行するexecutor。
タスクの追加や実行中断は他のスレッドからも行える。

•

loop()はmake_loop_exit()がほかのスレッドから呼ばれるまでひたすらタ
スクを実行&ブロッキング。

•

run_queued_closures()はすでにキューが入ってるものが空になるまで実
行。try_run_one_closure()の方は1タスクだけ実行。
inline_executorクラスのインタフェース
class inline_executor : public executor {
public:
explicit inline_executor();
…
};

•

キューイングしないシンプルなexecutor。

•

add()メンバ関数でタスクを追加するとその場で実行される。

•

ダミー実装として使う。
default executor

shared_ptr<executor> default_executor();
void set_default_executor(shared_ptr<executor> executor);

•

つまりは切り替え可能でグローバルなexecutor。

•

std::async(launch::async, f);で使用されるexecutor。
この設計の問題点 1/2

•

メモリアロケーションが考慮されていない。

•
•
•

内部コンテナのアロケータ(型/オブジェクト)を指定できない。
function<void()>を受け取る設計。このクラスは内部でnewする。

メモリアロケーションを考慮すると、設計が根本的に変わりうる。

•

たとえば、function<void()>の代わりに
template <class F> void add(F f);
とする場合、このメンバ関数は仮想関数にできない。

•

アロケータ型をクラスのテンプレートパラメータで指定する必要があ
るかもしれない。(現在は非テンプレート)
この設計の問題点 2/2

•

仮想関数が必要なのは、default_executorとserial_executorのため。
これらの機能は本当に必要だろうか?async()は今まで通り、呼ばれるた
びにexecutorの関係なしにスレッドを作ればいいのではないか。
これらのために、多くの設計選択を犠牲にしすぎているのではないか。

•

いずれにしても、メモリアロケーションに対する方針が必要。
考慮不足の機能は、寿命が短くなる(deprecatedになりやすい)。
ライブラリの標準化には、十分な設計・使用経験が必要だと考える。
考えられる設計
•

default executorさえなくなれば設計の幅がかなり向上するので、
たとあえばアロケータ指定や実装のバリエーションを考慮し、
以下のようにPolicy-based Designにするのはどうだろう?
using thread_pool = basic_executor<
thread_pool_model,
allocator<function<void()>> // default arg
>;

•

デフォルトのアロケータを使いたくなければ自分でエイリアスを
定義し直すだけでいいようにする。

•

基礎となるexecutorに共通インタフェースと実装を持たせ、
可変部は各ポリシー(thread_pool, serial, inline)としてパラメータ化する。

More Related Content

Viewers also liked

Greythorn Technology Market Landscape
Greythorn Technology Market LandscapeGreythorn Technology Market Landscape
Greythorn Technology Market LandscapeGreythornAU
 
Building the stacks for a mutualised newspaper
Building the stacks for  a mutualised newspaperBuilding the stacks for  a mutualised newspaper
Building the stacks for a mutualised newspaperThe Guardian Open Platform
 
Universidad nacional de chimborazo (trabajo) 2010
Universidad nacional de chimborazo (trabajo) 2010Universidad nacional de chimborazo (trabajo) 2010
Universidad nacional de chimborazo (trabajo) 2010RODOLFOEDGARSHIGUANG
 
Intro to WordPress #memtech
Intro to WordPress #memtechIntro to WordPress #memtech
Intro to WordPress #memtechSamuel Wood
 
Plantas carnivoras
Plantas carnivorasPlantas carnivoras
Plantas carnivorasSIMONEANTUNE
 
網路基礎建設簡報一
網路基礎建設簡報一網路基礎建設簡報一
網路基礎建設簡報一zman
 
Elogio de la perseverancia.
Elogio de la perseverancia.Elogio de la perseverancia.
Elogio de la perseverancia.José María
 
Extract of the report on the anaysis of the okoa kenya initiative
Extract of the report on the anaysis of the okoa kenya initiativeExtract of the report on the anaysis of the okoa kenya initiative
Extract of the report on the anaysis of the okoa kenya initiativeThe Star Newspaper
 
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...Paola Furlanetto
 
A Guide to Muir Woods National Monument
A Guide to Muir Woods National MonumentA Guide to Muir Woods National Monument
A Guide to Muir Woods National MonumentAmanda Starbuck
 
UX Nights Vol 03.06: Los games también son usuarios
UX Nights Vol 03.06: Los games también son usuariosUX Nights Vol 03.06: Los games también son usuarios
UX Nights Vol 03.06: Los games también son usuariosUX Nights
 
The Benefits of Community Banking
The Benefits of Community BankingThe Benefits of Community Banking
The Benefits of Community BankingExperian_US
 
CRM - Customer Relationship Managemennt
CRM - Customer Relationship Managemennt CRM - Customer Relationship Managemennt
CRM - Customer Relationship Managemennt adeel990
 
Web design bie daalt
Web design bie daaltWeb design bie daalt
Web design bie daaltUsukhuu Galaa
 
Customer Service By Azra Syed
Customer Service By Azra SyedCustomer Service By Azra Syed
Customer Service By Azra SyedAzra Syed
 

Viewers also liked (20)

Greythorn Technology Market Landscape
Greythorn Technology Market LandscapeGreythorn Technology Market Landscape
Greythorn Technology Market Landscape
 
Building the stacks for a mutualised newspaper
Building the stacks for  a mutualised newspaperBuilding the stacks for  a mutualised newspaper
Building the stacks for a mutualised newspaper
 
Universidad nacional de chimborazo (trabajo) 2010
Universidad nacional de chimborazo (trabajo) 2010Universidad nacional de chimborazo (trabajo) 2010
Universidad nacional de chimborazo (trabajo) 2010
 
Intro to WordPress #memtech
Intro to WordPress #memtechIntro to WordPress #memtech
Intro to WordPress #memtech
 
Plantas carnivoras
Plantas carnivorasPlantas carnivoras
Plantas carnivoras
 
網路基礎建設簡報一
網路基礎建設簡報一網路基礎建設簡報一
網路基礎建設簡報一
 
КРСК
КРСККРСК
КРСК
 
Elogio de la perseverancia.
Elogio de la perseverancia.Elogio de la perseverancia.
Elogio de la perseverancia.
 
Extract of the report on the anaysis of the okoa kenya initiative
Extract of the report on the anaysis of the okoa kenya initiativeExtract of the report on the anaysis of the okoa kenya initiative
Extract of the report on the anaysis of the okoa kenya initiative
 
Bee Style:vol.041
Bee Style:vol.041Bee Style:vol.041
Bee Style:vol.041
 
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...
Savings e investimenti pubblicitari: Wrap up & Best practises 4 marzo 2010- F...
 
A Guide to Muir Woods National Monument
A Guide to Muir Woods National MonumentA Guide to Muir Woods National Monument
A Guide to Muir Woods National Monument
 
Calendário 2014 2015
Calendário 2014 2015Calendário 2014 2015
Calendário 2014 2015
 
UX Nights Vol 03.06: Los games también son usuarios
UX Nights Vol 03.06: Los games también son usuariosUX Nights Vol 03.06: Los games también son usuarios
UX Nights Vol 03.06: Los games también son usuarios
 
The Benefits of Community Banking
The Benefits of Community BankingThe Benefits of Community Banking
The Benefits of Community Banking
 
Psd to shopify
Psd to shopifyPsd to shopify
Psd to shopify
 
Cómo las empresas pueden vender en redes sociales
Cómo las empresas pueden vender en redes socialesCómo las empresas pueden vender en redes sociales
Cómo las empresas pueden vender en redes sociales
 
CRM - Customer Relationship Managemennt
CRM - Customer Relationship Managemennt CRM - Customer Relationship Managemennt
CRM - Customer Relationship Managemennt
 
Web design bie daalt
Web design bie daaltWeb design bie daalt
Web design bie daalt
 
Customer Service By Azra Syed
Customer Service By Azra SyedCustomer Service By Azra Syed
Customer Service By Azra Syed
 

Similar to Executors and schedulers

Project Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab TokyoProject Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab TokyoCreativeContentLabTo
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み慎一 古賀
 
「C++Builderでモバイル開発にトライ!ベータ評価レポート」
「C++Builderでモバイル開発にトライ!ベータ評価レポート」「C++Builderでモバイル開発にトライ!ベータ評価レポート」
「C++Builderでモバイル開発にトライ!ベータ評価レポート」Embarcadero Technologies
 
QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築You&I
 
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説日本マイクロソフト株式会社
 
202202 open telemetry .net handson
202202 open telemetry .net handson202202 open telemetry .net handson
202202 open telemetry .net handsonTakayoshi Tanaka
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」Makoto SAKAI
 

Similar to Executors and schedulers (11)

Project Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab TokyoProject Management Plan Sample Creative Content Lab Tokyo
Project Management Plan Sample Creative Content Lab Tokyo
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
 
「C++Builderでモバイル開発にトライ!ベータ評価レポート」
「C++Builderでモバイル開発にトライ!ベータ評価レポート」「C++Builderでモバイル開発にトライ!ベータ評価レポート」
「C++Builderでモバイル開発にトライ!ベータ評価レポート」
 
C++ Now 2012 report
C++ Now 2012 reportC++ Now 2012 report
C++ Now 2012 report
 
QtでC++開発環境構築
QtでC++開発環境構築QtでC++開発環境構築
QtでC++開発環境構築
 
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説
【de:code 2020】 監視と管理を自動化するサンプル Center of Excellence Starter Kit 概説
 
202202 open telemetry .net handson
202202 open telemetry .net handson202202 open telemetry .net handson
202202 open telemetry .net handson
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
qmake入門
qmake入門qmake入門
qmake入門
 
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
 
Implement tech
Implement techImplement tech
Implement tech
 

More from Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 

Executors and schedulers