SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Thread affinity
And
CPS
2016.05.20 CONTINUATION STUDY 2016 KOUJI MATSUI (@KEKYO2)
自己紹介
けきょ (@kekyo2, www.kekyo.net)
ロードバイク乗り
Microsoft MVP for Visual Studio and Development Technology
認定スクラムマスター・スクラムプロダクトオーナー
Center CLRオーガナイザー
C#, F#, C++
おことわり
名古屋から来たアホです。なごやこわい界隈に生息してますが、
メンツには含まれていません(たぶん)
継続の学問的な知識はほとんど無いです。
◦ そのため、学問的厳密性は無いです。
◦ ぶっちゃけ、CPS的に画期的な話ではないと。
◦ スイートスポットにはまる人には、面白いかも知れません(多分いない)
アジェンダ
ユーザーインターフェイスとスレッド親和性
UIキューの隠蔽
非同期処理との融合
ユーザーインターフェイス
ユーザーインターフェイススレッド
Start
Message pumps UI Queue
Update
handler
Handler
Click
handler
Button
clicked
UI thread context
処理をオフロードする
ユーザーインターフェイススレッド vs ワーカースレッド
Start
Message pumps UI Queue
Update
handler
Handler
Click
handler
Start
Offload workings
Race
condition
Worker thread
context
処理をオフロードする
リソース競合
Handler start
Replace textbox
Worker thread
context
Modify UI states
Race condition
Race condition
スレッド親和性 (Thread affinity)
全てのUI部品やUIハンドラは、特定のスレッドで動作すること
を前提としています。
特定のスレッドに紐づいているUI部品の、スレッド依存の状態
を「スレッド親和性」と呼びます。
スレッド親和性を満たす
UIキューを介して通信を行う
Start
Message pumps UI Queue
Handler Handler Handler
Start
Offload workings
Worker thread
context
UI thread context
スレッド親和性を満たす
ハンドラとオフロード処理の関係
Start
Message pumps UI Queue
Update
handler
Handler
Click
handler
Start
Offload workings
ハンドラの遷移
Click handler
Offload workings
Update handler
UI Queue
Worker thread
context
UI thread context
UI thread context
UI Queue
ハンドラの遷移
Click handler
Offload workings
Update handler
UI Queue
UI Queue
ハンドラの遷移
Click handler
Offload workings
Update handler
ハンドラの遷移
Click handler
Offload workings
Update handler
ハンドラの遷移
Click handler
Offload workings
Update handler
ハンドラの遷移
Click handler
Offload workings
Update handler
何となく見えてきた?
アジェンダ
ユーザーインターフェイスとスレッド親和性
UIキューの隠蔽
非同期処理との融合
UIキューを隠ぺいする
Click handler
Offload workings
Update handler
UI Queue
UI Queue
ワーカースレッドからUIスレッドに跨ぐときに
UIキューが絡む
ワーカースレッド起動
UIキューを隠ぺいする
UIキューに要求(ワーカースレッド起動)を入れ、結果をUI
キューから得るような f を考える。
let uiq = new Queue<(unit -> ‘U)>()
let f (action: Func<‘T, ‘U>) (argument: ‘T) (cps: ‘U -> unit) =
Thread.Execute(fun _ ->
let result = action(argument)
uiq.Enqueue result)
while true do
let result = uiq.Dequeue()
cps result
ワーカースレッドの起動
継続を実行
.NETにおいてのワーカースレッド
.NET標準のワーカースレッド起動は Task.Run() メソッド。
Task.Run() は Task<‘U> を返す。
TaskにはCPSを仕込む Task.ContinueWith() メソッドがある。
let uiq = new Queue<(unit -> ‘U)>()
let f (action: Func<‘T, ‘U>) (argument: ‘T) (cps: ‘U -> unit) =
let task = Task.Run<‘U>(fun _ -> action(argument))
task.ContinueWith(fun t -> uiq.Enqueue t.Result)
while true do
let result = uiq.Dequeue()
cps result
継続を実行
ワーカースレッド完了時に
キューに入れる
DispatcherSynchronizationContext
.NETにおいてのUIキュー
.NET標準の同期化キューは SynchronizationContext クラス (SynchContext)。
SynchContext.Post() は、スレッド親和性が必要な場合に呼び出される。
CPSを渡せば必要なスレッドで継続を実行することを「想定」できる。
SynchContextの実装は、クラスを継承して作る必要がある。
◦ Windows FormsはWinFormsSynchronizationContext
◦ WPFはDispatcherSynchronizationContext
◦ を使えばいい(自動的に使われる)
UI Queue
Post()
SynchronizationContext
.NETにおいてのUIキュー
let f (action: Func<‘T, ‘U>) (argument: ‘T) (cps: ‘U -> unit) =
let task = Task.Run<‘U>(fun _ -> action(argument))
task.ContinueWith(fun t -> SynchContext.Current.Post(
(fun _ -> cps t.Result), null))
ワーカースレッド完了時に
SynchContextにPostする
インフラとしてのSynchContext
実はSynchContextは.NETの奥底で統合されています。
◦ 現在のスレッドに対応するSynchContextは、SynchContext.Currentでアクセス
できます。
Task.ContinueWithによるCPSも、Currentのインスタンスを自動的に
使います。
なので、前述のような明示的な Post は必要ありません。
let f (action: Func<‘T, ‘U>) (argument: ‘T) (cps: ‘U -> unit) =
let task = Task.Run<‘U>(fun _ -> action(argument))
task.ContinueWith(fun t -> cps t.Result)
直接継続できる
アジェンダ
ユーザーインターフェイスとスレッド親和性
UIキューの隠蔽
非同期処理との融合
.NET Task (.NET 4.0 / C# 4.0)
まずは、.NET 4.0 TaskのCPS (ContinueWithを使う)
関数に直接継続を渡していないが、
Task.ContinueWithに継続を渡している ≒ CPS
注: 手を抜いてasync使ってます
.NET Task (.NET 4.5/C# 5.0)
そして、.NET 4.5/C# 5.0 でのasync-awaitによる非同期処理
構文糖による継続
async-awaitでもTaskを使う
.NET Task comparison
これが .NET 4.0 (C# 4.0 Task only) こうなる .NET 4.5 (C# 5.0 async-await)
F# Async workflow
ほとんどasync-awaitと一緒
返されるのは Async<int>
F# Asyncクラスも内部でSynchContextを使ってスレッド親和性
を担保します。
つまり?
UIの応答処理をワーカースレッドにオフロードしたい。
Task.ContinueWithを使い、CPSな継続処理を登録する。
登録されたCPSは、SynchContextを使ってスレッド親和性を担
保する(正しいスレッドでCPSを実行する)。
上記インフラはTaskクラスで実現しているので、C#のasync-
awaitでも機能する
F# Async workflowでもAsyncクラスがSynchContextを使うので、
全く同じように機能する。
つまり?
TaskやAsyncは、ワーカースレッドだけではなく、I/O非同期処
理を表すこともできる(むしろそっちが主体)。
これらを全て統一して扱い、なおかつスレッド
親和性を担保するために、.NETの背景でCPSが継
続しまくってますよ!!
ご清聴ありがとうございました!
スライドはブログに上げます
◦ http://www.kekyo.net/

Weitere ähnliche Inhalte

Was ist angesagt?

いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばKouji Matsui
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門大樹 小倉
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate languageKouji Matsui
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ拓弥 遠藤
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions IIIKouji Matsui
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!Jun-ichi Sakamoto
 
TypeScriptはいいぞ
TypeScriptはいいぞTypeScriptはいいぞ
TypeScriptはいいぞJun Suzuki
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!Naoto Ishizawa
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできることkamiyam .
 
Clojure Language Update (2015)
Clojure Language Update (2015)Clojure Language Update (2015)
Clojure Language Update (2015)sohta
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)taskie
 

Was ist angesagt? (20)

いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate language
 
ぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽぼくのNode.jsのだいいっぽ
ぼくのNode.jsのだいいっぽ
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions III
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
TypeScriptはいいぞ
TypeScriptはいいぞTypeScriptはいいぞ
TypeScriptはいいぞ
 
古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!古い?ダサい?まだまだイケルChef!
古い?ダサい?まだまだイケルChef!
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできること
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
Clojure Language Update (2015)
Clojure Language Update (2015)Clojure Language Update (2015)
Clojure Language Update (2015)
 
JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)JavaScript Tips 2015(PDF 版)
JavaScript Tips 2015(PDF 版)
 
TypeScript超入門
TypeScript超入門TypeScript超入門
TypeScript超入門
 

Ähnlich wie Thread affinity and CPS

Unimaginable code & commentary
Unimaginable code & commentaryUnimaginable code & commentary
Unimaginable code & commentaryKazuki Kachi
 
Real world android akka
Real world android akkaReal world android akka
Real world android akkaTaisuke Oe
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Hirono Jumpei
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in FukuokaShinobu Izumi
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けてonotchi_
 
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!KAIKenzo
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携Tomoaki Shimizu
 
45分で理解するKubernetesの世界
45分で理解するKubernetesの世界45分で理解するKubernetesの世界
45分で理解するKubernetesの世界Kujirai Takahiro
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Taisuke Oe
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要Miho Yamamoto
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
 
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策Daisuke Nagao
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 

Ähnlich wie Thread affinity and CPS (20)

Unimaginable code & commentary
Unimaginable code & commentaryUnimaginable code & commentary
Unimaginable code & commentary
 
Real world android akka
Real world android akkaReal world android akka
Real world android akka
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けて
 
Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!Enjoy handwritten digits recognition AI !!
Enjoy handwritten digits recognition AI !!
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
45分で理解するKubernetesの世界
45分で理解するKubernetesの世界45分で理解するKubernetesの世界
45分で理解するKubernetesの世界
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
EC2に対するcloudwatchのアクション設定がポリシーで使えないときの代替策
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 

Mehr von Kouji Matsui

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

Mehr von Kouji Matsui (18)

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

Thread affinity and CPS