SlideShare a Scribd company logo
Async
DeepDive
before de:code
2016.05.23 DE:CODE前夜祭 KOUJI MATSUI (@KEKYO2)
自己紹介
けきょ (@kekyo2, www.kekyo.net)
ロードバイク乗り
Microsoft MVP for Visual Studio and Development Technology
認定スクラムマスター・スクラムプロダクトオーナー
Center CLRオーガナイザー
C#, F#, IL, C++
アジェンダ
なぜ非同期処理が必要なのか、上から下までをやります
細部はきりがないので、質問があれば随時受けます
こんな非同期処理のコード
非同期処理の実現には、
ワーカースレッドを使うのか?
ワーカースレッドを使わない
高いパフォーマンス
ユーザーモード
User mode thread context
Event Object
カーネルモード
User mode thread context
デバイス応答
Interrupt handler context
Come back Salmon
どのプロセスに戻せばいいのか?
どのスレッドに戻せばいいのか?
DPC context
(Unknown thread)
Event Object
I/O Completion port
Thread pool
再びユーザーモード I/O completion port
Managed thread
(Main/other)
Thread pool
CPS (Task.ContinueWith)
Worker thhread
context
I/O完了ポート
ここに至るまでの間、基本的にワー
カースレッドは全て解放され、ハー
ドウェア駆動による処理だけが実行
されている(→完全にハードウェア
オフロードされている)
だから完全に非同期処理でコードを
実現すると、高パフォーマンスが得
られる。いかにワーカースレッドを
「使わないか」が鍵。
カーネルイベントオブジェクトでI/O処理の完了が通知され、.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

More Related Content

PDF
式の体を成して無い式を式の体を成すように式と式木で何とかする式
PDF
メタプログラミングでExcel仕様書よさらば
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PDF
Nespのコード生成
PDF
Thread affinity and CPS
PDF
Async DeepDive basics
PDF
C#でわかる こわくないMonad
PDF
Win32 APIをてなずけよう
式の体を成して無い式を式の体を成すように式と式木で何とかする式
メタプログラミングでExcel仕様書よさらば
.NET Coreから概観する.NETのOSSへの取り組み
Nespのコード生成
Thread affinity and CPS
Async DeepDive basics
C#でわかる こわくないMonad
Win32 APIをてなずけよう

What's hot (20)

PDF
真Intermediate languageのキホン
PDF
continuatioN Linking
PDF
パターンでわかる! .NET Coreの非同期処理
PDF
de:code報告
PDF
Bluetoothでgo!
PDF
WebStormでできること
PDF
IDEALIZE YOU
PDF
Visual Studioで始めるTypeScript開発入門
PDF
TypeScript補完計画 for Sublime Text 2
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
PPTX
.NET vNext
PDF
Hello! intermediate language
PDF
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
PPTX
ぼくのNode.jsのだいいっぽ
PDF
DroidKaigi - Welcome talk
PDF
TypeScript による今風の web アプリ開発
PDF
TypeScript超入門
PPTX
Visual studio 2015 update1 ctpとcsi
PDF
3日時間をもらったのでTypeScriptを触ってみた
真Intermediate languageのキホン
continuatioN Linking
パターンでわかる! .NET Coreの非同期処理
de:code報告
Bluetoothでgo!
WebStormでできること
IDEALIZE YOU
Visual Studioで始めるTypeScript開発入門
TypeScript補完計画 for Sublime Text 2
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
.NET vNext
Hello! intermediate language
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
ぼくのNode.jsのだいいっぽ
DroidKaigi - Welcome talk
TypeScript による今風の web アプリ開発
TypeScript超入門
Visual studio 2015 update1 ctpとcsi
3日時間をもらったのでTypeScriptを触ってみた
Ad

Similar to Async deepdive before de:code (19)

PDF
いまさら恥ずかしくてAsyncをawaitした
PDF
これからの「async/await」の話をしよう
PPTX
非同期処理の基礎
PDF
async/await deep dive
PDF
async/await不要論
PDF
Async History in .NET
PPTX
async/await のしくみ
PPTX
An other world awaits you
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
PDF
async/awaitダークサイド is 何
PPTX
非同期系統の基礎
PDF
Windows ストア アプリでスレッド間排他処理
PDF
Windows 8時代のUXを支える非同期プログラミング
PPTX
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
PPTX
C# 8.0 非同期ストリーム
PDF
Android勉強会第二回-非同期処理-
PDF
非同期の時代がやってくる!
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
PDF
C21 SQL Server のスレッド管理 by 古賀啓一郎
いまさら恥ずかしくてAsyncをawaitした
これからの「async/await」の話をしよう
非同期処理の基礎
async/await deep dive
async/await不要論
Async History in .NET
async/await のしくみ
An other world awaits you
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
async/awaitダークサイド is 何
非同期系統の基礎
Windows ストア アプリでスレッド間排他処理
Windows 8時代のUXを支える非同期プログラミング
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
C# 8.0 非同期ストリーム
Android勉強会第二回-非同期処理-
非同期の時代がやってくる!
C#次世代非同期処理概観 - Task vs Reactive Extensions
C21 SQL Server のスレッド管理 by 古賀啓一郎
Ad

More from Kouji Matsui (19)

PDF
Making archive IL2C #6-55 dotnet600 2018
PDF
Matrix signal controller and BrainPad overview
PDF
Fun with BrainPad
PDF
What's Functional?
PDF
Pitfall for WioLTE
PDF
How to make the calculator
PDF
Write common, run anywhere
PDF
Locality of Reference
PDF
You will be assimilated. Resistance is futile.
PDF
How to meets Async and Task
PDF
Beachhead implements new opcode on CLR JIT
PDF
不健康なIt戦士を健康的にするアレの話
PDF
Final LINQ extensions III
PDF
SourceTreeで始めよう! Gitへの乗り換え指南
PDF
Final LINQ Extensions II
PDF
Final LINQ Extensions
PDF
ポイントをおさえて移行しよう!Git乗り換え超初級
PDF
抽象太郎ものがたり そして伝説へ
PDF
プロ生ちゃんをひろっちゃう!
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Fun with BrainPad
What's Functional?
Pitfall for WioLTE
How to make the calculator
Write common, run anywhere
Locality of Reference
You will be assimilated. Resistance is futile.
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
不健康なIt戦士を健康的にするアレの話
Final LINQ extensions III
SourceTreeで始めよう! Gitへの乗り換え指南
Final LINQ Extensions II
Final LINQ Extensions
ポイントをおさえて移行しよう!Git乗り換え超初級
抽象太郎ものがたり そして伝説へ
プロ生ちゃんをひろっちゃう!

Async deepdive before de:code