SlideShare a Scribd company logo
1 of 48
.NET PARALLEL FRAMEWORK
1
AGENDA
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
2
INTRODUCTION
從單核心轉變到多核心的平行處理,在重疊的時間執行多個運算
3
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
INTRODUCTION
4
INTRODUCTION
從單核心轉變到多核心的平行處理,在重疊的時間執行多個運算
 回應式介面(Responsive UI)
 非同步程序(Asynchronous)
 更好的效能(Performance)
5
CONCURRENCY
6
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
THREADS
7
THREADS
 簡單的Thread範例
 ThreadStart 是委派(delegate)函式,經由Thread類別建立實體,呼叫Start函式執行
Alpha alpha = new Alpha();
Thread thread = new Thread(new ThreadStart(alpha.Beta));
thread.Start();
8
CONCURRENCY CHALLENGES
 同步問題
 Race Condition
 Deadlock
 倚賴記憶體和硬體架構支援
 除錯困難
9
AMDAHL'S LAW
平行運算之後效率提升 整體效能獲得
 1 = ((1-P) + (P/Speedup))
 P : 支援平行運算的部分
 Speedup = CPU的數量
圖片來源:WIKI 10
MULTITHREADING VS PARALLEL
 Multithreading:Overlapping time periods 在
重疊的時間執行多個運算
 Parallel:Simultaneously 同時執行多個運算
圖片來源:MSDN 11
MULTITHREADING VS PARALLEL
 多執行序
 長時間處理時,維持UI程式的反應
 允許多個需求和過程可以分別被處理
 卸載可以發生在應用程式的背後
 平行程式
 計算效能提高
 效能與核心/處理器數量呈正比,並在核心/處理器數量增加時,不需要程式碼來指定硬體的設定
12
MULTITHREADING
 用多執行序來做平行程式的問題
 複雜的撰寫
 race condition
 執行序的數量最好跟CPU一樣
 並不是每一項工作都在相同時間完成
13
MULTITHREADING
 是同時處理多個獨立的任務(task),在邏輯(logically)上是獨立的,主要目的是避免延遲(latency)
 當多個執行緒(thread)同時執行,如果需要共享系統資源,要面對死結(deadlocks)和數據競爭(race
condition)的問題,使得除錯變得極其困難和複雜
14
PARALLEL
 實際(realistic)將任務(task)分割成一組相關的任務,同時執行
 同樣也有死結(deadlocks)和數據競爭(race condition)的問題,還有資源共享(sharing)和資料分區
(partitioning),這讓除錯變得極其困難和複雜
15
LIMITATIONS
 Serial Code
 Sequential input/output
 同步(Synchronization)
16
PARALLEL EXTENSIONS
17
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
TASK PARALLELISM
 分解程序分成部分例如方法,報表等
 識別哪些可以並行執行的部分
 分配每部分單獨任務
 在不同核心(Core)並行執行的任務
 每個任務有可能執行不同的操作
18
ARCHITECTURE
圖片來源:MSDN 19
CONCURRENT COLLECTIONS
 Thread-safe collection
 ConcurrentStack
 ConcurrentQueueo
 ConcurrentDictinary
 Work exchange
 BlockingCollection
 IProducerConsuerCollection
 Initialization
 LazyInit
 Phased Operation
 CountdownEvent
 Barrier
 Lock
 ManualResetEventSlim
 SemaphoreSlim
 SpinLock
 SpinWait
20
平行執行
1. Tasks
2. The Task Parallel Library (TPL):
1. For
2. Foreach
3. Invoke
3. Parallel LINQ (PLINQ)
21
合併平行結果
 控制的時機
 處理分割後
 緩衝結果直到所有的分割都完成
 AsParallel
 AsOrdered
 Sorting
22
查詢分析
 WithExecutionMode - 強制平行運算
23
分割
 Chunk
 來源資料沒法被加上索引時使用
 Range
 確認執行序的數量,將輸入來源分割成最佳化的大小
 Striped
 給資料前端做處理和評估的標準查詢運算子用
 Hash
 給需要比較資料元素查詢用的
24
WORK STEALING
圖片來源:A JAVA FORK/JOIN DOUG LEA
25
OVERHEAD
 工作分割有一個最佳的大小,需要測試才能確定
 執行時間需比分割負載的時間長
 同步、平行分割的部分相互輔助
 平行工作越獨立越好,任何一個外來的同步,都會降低效能和發生不容易除錯的race condition
26
PARALLEL PROGRAMMING
27
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
DEMO 1 : TASKS
 Task programming model
 給予更多控制的thread
 Return Result
 Task Channing
28
DEMO 1 : TASKS
Task t1 = null;
t1 = Task.Factory.StartNew(() =>
{
Console.WriteLine("Task 1");
});
Console.WriteLine("Main");
var t2 = t1.ContinueWith(delegate
{
Thread.Sleep(1000);
Console.WriteLine("Continue With Task 1");
});
29
DEMO 1 : TASKS
Task t2 = null;
t2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
return "Result of Task 2";
});
string result = t2.Result;
Console.WriteLine(result);
30
DEMO 2 : PARALLEL
 這裡使用了For method,對照Serially method
 Parallel Loop
 Parallel.For
31
DEMO 2 : PARALLEL
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
}
watch.Stop();
Console
.WriteLine(watch.Elapsed.Seconds.ToString());
32
DEMO 2 : PARALLEL
Stopwatch watch = new Stopwatch();
watch.Start();
System.Threading.Tasks.Parallel
.For(0, 10, i =>
{
Thread.Sleep(1000);
});
watch.Stop();
Console
.WriteLine(watch.Elapsed.Seconds.ToString());
33
DEMO 3 : PLINQ
 Parallel LINQ 是 LINQ to Objects 的實作(implement)
 For和LINQ執行時間幾乎相同,使用PLINQ執行時間快了一倍
 Parallel.Invoke
34
DEMO 3 : PLINQ
int[] array = Enumerable.Range(0, 20000).ToArray();
bool[] results = new bool[array.Length];
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < array.Length; i++)
{
//質數
results[i] = IsPrime(array[i]);
}
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
35
DEMO 3 : PLINQ
int[] array = Enumerable.Range(0, 20000).ToArray();
bool[] results = new bool[array.Length];
Stopwatch watch = new Stopwatch();
watch.Start();
//質數
results =
array
.Select(x => IsPrime(x))
.ToArray();
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
36
DEMO 3 : PLINQ
int[] array = Enumerable.Range(0, 20000).ToArray();
bool[] results = new bool[array.Length];
Stopwatch watch = new Stopwatch();
watch.Start();
//質數
results =
array
.AsParallel()
.Select(x => IsPrime(x))
.ToArray();
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
37
DEMO 4 : RACE CONDITION
 數據競爭
 遞增特定變數並將結果儲存起來,成為不可分割完成的作業
38
DEMO 4 : RACE CONDITION
int counter = 0;
Object o = new Object();
Stopwatch watch = new Stopwatch();
watch.Start();
Parallel.For(0, 100000, i =>
{
Thread.Sleep(1);
counter++;
});
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
Console.WriteLine(counter.ToString());
39
DEMO 4 : RACE CONDITION
int counter = 0;
Object o = new Object();
Stopwatch watch = new Stopwatch();
watch.Start();
Parallel.For(0, 100000, i =>
{
Thread.Sleep(1);
lock (o)
{
counter++;
}
});
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
Console.WriteLine(counter.ToString());
40
DEMO 4 : RACE CONDITION
int counter = 0;
Object o = new Object();
Stopwatch watch = new Stopwatch();
watch.Start();
Parallel.For(0, 100000, i =>
{
Thread.Sleep(1);
Interlocked.Increment(ref counter);
});
watch.Stop();
Console.WriteLine(watch.Elapsed.Seconds);
Console.WriteLine(counter.ToString());
41
DEMO 5 : DEADLOCKS
 使用鎖定(lock)可能會造成死結(Deadlocks)
 Nested/Child Tasks
42
DEMO 5 : DEADLOCKS
static void Main(string[] args)
{
int transfers = 0;
Deadlock.Break(() => transfers, 500);
Account a = new Account { amount = 1000 };
Account b = new Account { amount = 1000 };
while (true)
{
Parallel.Invoke(
() => Transfer(a, b, 100)
,() => Transfer(b, a, 100));
transfers += 2;
}
}
43
DEMO 5 : DEADLOCKS
static void Transfer(Account one, Account two, int amount)
{
lock (one)
{
lock (two)
{
one.amount -= amount;
two.amount += amount;
}
}
}
class Account
{
public int amount;
}
44
DEMO 5 : DEADLOCKS
class Deadlock
{
private static ConcurrentQueue<Timer> queue = new ConcurrentQueue<Timer>();
public static void Break<T>(Func<T> value, int milliseconds) where T : IEquatable<T>
{
bool initialized = false;
T last = default(T);
queue.Enqueue(new Timer(t =>
{
T current = value();
if (initialized && last.Equals(current))
{
Debugger.Break();
}
initialized = true;
last = current;
}, null, milliseconds, milliseconds));
}
}
45
CONCLUSION
46
Introduction
Concurrency
Parallel Extensions
Parallel Programming
Conclusion
CONCLUSION
 Parallel .NET 降低了 multi-thread 的複雜度
 更好的控制方法
 Parallel Loop
 For
 Foreach
 Invoke
 執行序安全物件
 ConcurrentDictionary
 ConcurrentQueue
 ConcurrentStack
 還是要注意 multi-thread 的問題
 Race Condition
 Deadlock
47
THANKS
48

More Related Content

What's hot

Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorAdy Liu
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1Sheng-Han Su
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambdakoji lin
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發AgileCommunity
 
Use Lambdas in Android
Use Lambdas in AndroidUse Lambdas in Android
Use Lambdas in Androidkoji lin
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记yiditushe
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版Simen Li
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
嵌入式測試驅動開發
嵌入式測試驅動開發嵌入式測試驅動開發
嵌入式測試驅動開發hugo lu
 
Erlang jiacheng
Erlang jiachengErlang jiacheng
Erlang jiachengAir-Smile
 
3小时 快速了解postgre sql
3小时 快速了解postgre sql3小时 快速了解postgre sql
3小时 快速了解postgre sqlMichael Fan
 
Phpunit入门 r2
Phpunit入门 r2Phpunit入门 r2
Phpunit入门 r2Baohua Cai
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)wang hongjiang
 
深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)wang hongjiang
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7Justin Lin
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程Jun Liu
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 

What's hot (20)

Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
 
Java Thread
Java ThreadJava Thread
Java Thread
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambda
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
 
Use Lambdas in Android
Use Lambdas in AndroidUse Lambdas in Android
Use Lambdas in Android
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
嵌入式測試驅動開發
嵌入式測試驅動開發嵌入式測試驅動開發
嵌入式測試驅動開發
 
Erlang jiacheng
Erlang jiachengErlang jiacheng
Erlang jiacheng
 
3小时 快速了解postgre sql
3小时 快速了解postgre sql3小时 快速了解postgre sql
3小时 快速了解postgre sql
 
Phpunit入门 r2
Phpunit入门 r2Phpunit入门 r2
Phpunit入门 r2
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
 
深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7
 
軟體工程(總結篇)
軟體工程(總結篇)軟體工程(總結篇)
軟體工程(總結篇)
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 

Similar to Net Parallel Programming .NET平行處理與執行序

[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)Shanda innovation institute
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)yiditushe
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Hazem Saleh
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demoyiditushe
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC
 
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...SernHao TV
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3Wen Liao
 
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断JAVA内存泄漏及诊断
JAVA内存泄漏及诊断ivannotes
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC
 
cppcheck源码分析
cppcheck源码分析cppcheck源码分析
cppcheck源码分析Wu Liang
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)jeffz
 
实时任务调度
实时任务调度实时任务调度
实时任务调度Tony Deng
 
Junit使用指南及作业规范
Junit使用指南及作业规范Junit使用指南及作业规范
Junit使用指南及作业规范dong jiang
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
小谈Javascript设计模式
小谈Javascript设计模式小谈Javascript设计模式
小谈Javascript设计模式Adam Lu
 
服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt锐 张
 
單元測試:Mocha、Chai 和 Sinon
單元測試:Mocha、Chai 和 Sinon單元測試:Mocha、Chai 和 Sinon
單元測試:Mocha、Chai 和 SinonHsin-Hao Tang
 
为实时机器学习设计的算法接口与迭代引擎_FFA_2021
为实时机器学习设计的算法接口与迭代引擎_FFA_2021为实时机器学习设计的算法接口与迭代引擎_FFA_2021
为实时机器学习设计的算法接口与迭代引擎_FFA_2021Dong Lin
 

Similar to Net Parallel Programming .NET平行處理與執行序 (20)

[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demo
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
JAVA内存泄漏及诊断
JAVA内存泄漏及诊断JAVA内存泄漏及诊断
JAVA内存泄漏及诊断
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 
cppcheck源码分析
cppcheck源码分析cppcheck源码分析
cppcheck源码分析
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
 
Junit使用指南及作业规范
Junit使用指南及作业规范Junit使用指南及作业规范
Junit使用指南及作业规范
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
小谈Javascript设计模式
小谈Javascript设计模式小谈Javascript设计模式
小谈Javascript设计模式
 
服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt服务器端性能优化 提升Qps、rt
服务器端性能优化 提升Qps、rt
 
單元測試:Mocha、Chai 和 Sinon
單元測試:Mocha、Chai 和 Sinon單元測試:Mocha、Chai 和 Sinon
單元測試:Mocha、Chai 和 Sinon
 
为实时机器学习设计的算法接口与迭代引擎_FFA_2021
为实时机器学习设计的算法接口与迭代引擎_FFA_2021为实时机器学习设计的算法接口与迭代引擎_FFA_2021
为实时机器学习设计的算法接口与迭代引擎_FFA_2021
 

More from HO-HSUN LIN

以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.jsHO-HSUN LIN
 
區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)HO-HSUN LIN
 
Tensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymTensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymHO-HSUN LIN
 
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具HO-HSUN LIN
 
Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發HO-HSUN LIN
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具HO-HSUN LIN
 

More from HO-HSUN LIN (7)

以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js
 
區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)
 
Tensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymTensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI Gym
 
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
 
Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發
 
ASP.NET AJAX
ASP.NET AJAXASP.NET AJAX
ASP.NET AJAX
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具
 

Net Parallel Programming .NET平行處理與執行序

Editor's Notes

  1. Thread-safe collection ConcurrentStack 後進先出(Last In-First Out) ConcurrentQueue 先進先出(FIFO) ConcurrentDictinary Work exchange BlockingCollection IProducerConsuerCollection Initialization LazyInit Phased Operation CountdownEvent Barrier Lock ManualResetEventSlim 告知一個以上的等候中執行緒已發生事件 SemaphoreSlim 限制可以同時存取資源或資源集區的執行緒數目 SpinLock SpinWait
  2. 查詢分析 WithExecutionMode - 強制平行運算   分割 chunk 來源資料沒法被加上索引時使用 range 確認執行序的數量,將輸入來源分割成最佳化的大小,會在資料室可使用索引時被選擇 高效能,沒有同步需求 striped 給資料前端做處理和評估的標準查詢運算子用 hash 給需要比較資料元素查詢用的,分割相同鍵雜湊碼數值的元素給同一個執行序 節省分割負載時間
  3.  分割 chunk 來源資料沒法被加上索引時使用 range 確認執行序的數量,將輸入來源分割成最佳化的大小,會在資料室可使用索引時被選擇 高效能,沒有同步需求 striped 給資料前端做處理和評估的標準查詢運算子用 hash 給需要比較資料元素查詢用的,分割相同鍵雜湊碼數值的元素給同一個執行序 節省分割負載時間