Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

UI Fetch an image from network 要求した データの加工 画面操作 ネットワークから データ取得 画面の更新 同期取得 1. 画面操作 2. データ取得 3. (2.の取得を待ってから) 画面の更新

Slide 8

Slide 8 text

1. 画面操作 2. 画面更新 (何も待っていない) 画面操作 ネットワークから データ取得 要求した データの加工 画面更新 Threadpool

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Webサイト 1. ボタン押す 1-1.データ 取得 2. UI更新

Slide 11

Slide 11 text

Webサイト 1. ボタン押す 1-1.データ 取得 2. UI更新 3. …

Slide 12

Slide 12 text

行列計算 1. 行列掛け算 開始 1-1. 1行目演算 2. 文字出力 3. 終了 1-2. 2行目演算

Slide 13

Slide 13 text

マルチスレッド 1 1-1 2 非同期処理 1 処理待ち キュー 2 2-1 1-1 2-1

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

メモリ空間 A.exe 起動 A.exe用 メモリ確保

Slide 20

Slide 20 text

メモリ 共有しない プロセスA A用メモリ空間 プロセスB B用メモリ空間 プロセス間通信の仕組 みで、実際には情報の やりとりは可能

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

プロセスA スレッド1 スレッド2 スレッド3 メモリ 共有可能 メモリ (番外編) スレッドがプロセスで実装 言語VMでスレッド制御 などもある

Slide 23

Slide 23 text

http://itpro.nikkeibp.co.jp/article/COLUMN/20070416/268374/ プロセスA スレッド1 スレッド2 …

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

プロセスA スレッドの 処理の流れは1つ スレッド1 JavaScriptはシング ルスレッドだけど 非同期実装可能

Slide 26

Slide 26 text

プロセスA スレッド1 スレッド2 スレッド3 スレッド4 スレッド5 複数スレッドは 同時に並列して処理が可能 (マルチコアの場合)

Slide 27

Slide 27 text

プロセスA スレッド1 スレッド2 スレッド3 スレッド4 スレッド5 プロセス内で共有しているメモリ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Core Core Core Core Coreの数だけ 平行して処理が可能!

Slide 30

Slide 30 text

Core

Slide 31

Slide 31 text

Core 処理1 処理2 処理3 処理1

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

マルチスレッド (マルチコアの場合) 1 1-1 2 非同期処理 1 処理待ち キュー 2 2-1 1-1 2-1

Slide 35

Slide 35 text

マルチスレッド (マルチコアの場合) 1 1-1 2 非同期処理 1 処理待ち キュー 2 2-1 1-1 2-1

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

http://www.atmarkit.co.jp/ait/articles/0503/12/news025.html

Slide 39

Slide 39 text

1つプロセス内の 処理 複数プロセス間の 処理 他リソース間の 処理 非同期処理 レスポンスタイム の向上 →「待たない」 並行処理 マルチスレッドの 効率的利用 →並列処理 スループット向上 ex)ディスクアクセ スの間に、CPUを 利用する レスポンスタイ ムの向上 ex)DBからデータ を取得するなど、 「非同期」でよ く使われる例は これ

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

プロジェクト 例 種類 機能の例 非同期処理 C++ C++11 std::thread / std::promise std::async VC++ Windows Runtime C++/CX ppltasks.h concurrency::task 並列処理 (余談) DirectX (GPGPU利用) C++AMP amp.h concurrency::parallel_for_each

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

#include "stdafx.h“ #include #include int main( ){ int num = 0; std::promise p00; // promise宣言 非同期プロバイダ std::thread t00([ &num, &p00 ](){ // thread で別タスクを実行する ++ num; p00.set_value( num ); // 非同期処理で返すものを設定 }); std::future f00 = p00.get_future(); // 非同期受取りObj宣言 int result = f00.get(); // タスク処理を待つ(同期を取る) t00.join(); return( 0 );

Slide 45

Slide 45 text

#include "stdafx.h“ #include #include int main( ){ int num = 0; std::future a00([ &num ](){ // asyncで別タスク実行 ++ num; return( num ); // 非同期処理で返すものを設定 }); int result = a00.get(); // 同期を取る return( 0 ); } threadに比べてasyncは ちょっとだけ簡易になった

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

#include "stdafx.h“ #include #include // でもOK int main( ){ int num = 0; concurency::taskt01([ &num ](){ // taskで別タスク実行 ++ num; return( num ); // 非同期処理で返すものを設定 }); int result = t01.get(); // 同期を取る return( 0 ); } std::asyncと同じ形

Slide 49

Slide 49 text

concurency::

Slide 50

Slide 50 text

concurency::task t([]() { return( 1 ); }).then([](int n) { return( ++n ); }).then([](int n) { return( ++n ); })

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

http://isocpp.org/std/status

Slide 53

Slide 53 text

C++14 auto and decltype(auto) return types Generic lambdas (一部) C++17 (予定) Concurrency TS(?) Resumable functions and await (一部)

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

#include #include concurrency::task my_proc(void) __resumable{ auto x = []() __resumable->concurrency::task { std::cout << “abc." << std::endl; }; __await x(); std::cout << “def." << std::endl; } int main() { auto task = my_proc(); task.wait(); }

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

void App1::MainPage::my_btn_click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { task( KnownFolders::DocumentsLibrary->CreateFileAsync( my_txt->Text ,CreationCollisionOption::ReplaceExisting) ).then([this](StorageFile^ file) { my_btn_01->Content = “ファイル作成しました"; }); }

Slide 59

Slide 59 text

concurrency::task App1::MainPage::my_btn_click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)__resumable { auto file = __await file->CreateFileAsync( my_txt->Text, CreationCollisionOption::ReplaceExisting); my_btn_01->Content = “ファイル作成しました"; }

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

めとべや公式 WPFアプリ操作ライブラリ α

Slide 64

Slide 64 text

めとべや で検索 Nugetで入手できます!

Slide 65

Slide 65 text

・簡単にWPFのコントロールを操作。 ・実行の同期非同期が選択可能。 ・最終的には何でもできる! →というのは、下位レイヤで使ってるのが・・・

Slide 66

Slide 66 text

Codeer.Friendly Windowsアプリ操作系最強! 他プロセスの メソッド、プロパティー、フィールド を何でも呼び出すことができる。 Only one

Slide 67

Slide 67 text

No content