async deepdive basics

14
Async DeepDive “Basics” 2016.05.17 TUNE’S WELCOME KOUJI MATSUI (@KEKYO2)

Upload: kouji-matsui

Post on 08-Feb-2017

147 views

Category:

Software


0 download

TRANSCRIPT

AsyncDeepDive“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): ハードウェア割り込みとDPCAsync訪ねて3000里 (4): I/Oの完了とAPCAsync訪ねて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