Async
DeepDive
“Basics”
2016.05.17 TUNE’S WELCOME KOUJI MATSUI (@KEKYO2)
自己紹介
けきょ (@kekyo2, www.kekyo.net)
ロードバイク乗り
Microsoft MVP for Visual Studio and Development Technology
認定スクラムマスター・スクラムプロダクトオーナー
Center CLRオーガナイザー
いつもの事だけど
アジェンダ
・上から下までをやる
10分じゃ時間がアレなんだよー!!
if ちゅーん |> Async.知ってる then
raise InvalidOperationException “詰んだ”
こんな非同期処理のコード
ワーカースレッドを使わない
高いパフォーマンス
ユーザーモード
User mode thread context
カーネルモード
User mode thread context
デバイス応答
Interrupt handler context
Come back Salmon
どのプロセスに戻せばいいのか?
どのスレッドに戻せばいいのか?
DPC context
(Unknown thread)
再びユーザーモード APC Execution thread
(Main/other) APC Queue
CPS (Task.ContinueWith)
実際には
APC Queueではなく、カーネルイベントオブジェクトで通知し
て、.NET ThreadPoolからI/O完了ポートを使ってワーカースレッドが割
り当てられて実行される
この間、基本的にワーカースレッドは全て解放され、ハードウェア駆
動による処理だけが実行されている(→完全にハードウェアオフロー
ドされている)
だから完全に非同期処理でコードを実現すると、高パフォーマンスが
得られる。いかにワーカースレッドを「使わないか」が鍵。
という事は:
Task.Run() 使ったら負け
Task.Wait(), Task.Result 使ったら負け
Async.RunSyncronosly 使ったら負け
ご清聴ありがとうございました!
スライドはブログに上げます
◦ http://www.kekyo.net/
Async訪ねて3000里
◦ Async訪ねて3000里 (1): ユーザーモードのターン
Async訪ねて3000里 (2): ファイルシステム・パーティションマネージャ・物理
ディスクデバイスドライバ
Async訪ねて3000里 (3): ハードウェア割り込みとDPC
Async訪ねて3000里 (4): I/Oの完了とAPC
Async訪ねて3000里 (5): TaskCompletionSourceでTaskの継続へ
Async訪ねて3000里 (6): I/O完了ポートによるワーカースレッドの運用
Asyncの基礎
◦ これからの「async/await」の話をしよう
http://www.slideshare.net/kekyo/asyncawait-41353786
◦ async/awaitダークサイドis何
http://www.slideshare.net/kekyo/asyncawait-is

Async DeepDive basics