Enviar pesquisa
Carregar
並行與平行
•
7 gostaram
•
2,662 visualizações
Justin Lin
Seguir
《Python 3.5 技術手冊》第 13 章投影片
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 45
Baixar agora
Baixar para ler offline
Recomendados
流程語法與函式
流程語法與函式
Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
例外處理
例外處理
Justin Lin
資料永續與交換
資料永續與交換
Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
執行緒與並行API
執行緒與並行API
Justin Lin
Recomendados
流程語法與函式
流程語法與函式
Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
例外處理
例外處理
Justin Lin
資料永續與交換
資料永續與交換
Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
執行緒與並行API
執行緒與並行API
Justin Lin
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
例外處理
例外處理
Justin Lin
輸入輸出
輸入輸出
Justin Lin
9. meta-programming
9. meta-programming
Justin Lin
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
7. 例外處理
7. 例外處理
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
4. 流程語法與函式
4. 流程語法與函式
Justin Lin
如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統
なおき きしだ
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
從模組到類別
從模組到類別
Justin Lin
7. 錯誤處理
7. 錯誤處理
Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
流程語法與函式
流程語法與函式
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
從模組到類別
從模組到類別
Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
類別的繼承
類別的繼承
Justin Lin
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web Development
P3 InfoTech Solutions Pvt. Ltd.
Mais conteúdo relacionado
Mais procurados
CH11:執行緒與並行API
CH11:執行緒與並行API
Justin Lin
例外處理
例外處理
Justin Lin
輸入輸出
輸入輸出
Justin Lin
9. meta-programming
9. meta-programming
Justin Lin
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
7. 例外處理
7. 例外處理
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
4. 流程語法與函式
4. 流程語法與函式
Justin Lin
如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統
なおき きしだ
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
從模組到類別
從模組到類別
Justin Lin
7. 錯誤處理
7. 錯誤處理
Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
流程語法與函式
流程語法與函式
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
從模組到類別
從模組到類別
Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
Mais procurados
(20)
CH11:執行緒與並行API
CH11:執行緒與並行API
例外處理
例外處理
輸入輸出
輸入輸出
9. meta-programming
9. meta-programming
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
7. 例外處理
7. 例外處理
13.並行、平行與非同步
13.並行、平行與非同步
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
4. 流程語法與函式
4. 流程語法與函式
如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
從模組到類別
從模組到類別
7. 錯誤處理
7. 錯誤處理
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
流程語法與函式
流程語法與函式
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
從模組到類別
從模組到類別
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Destaque
類別的繼承
類別的繼承
Justin Lin
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web Development
P3 InfoTech Solutions Pvt. Ltd.
Python Programming Essentials - M22 - File Operations
Python Programming Essentials - M22 - File Operations
P3 InfoTech Solutions Pvt. Ltd.
《Python 3.5 技術手冊》第二章草稿
《Python 3.5 技術手冊》第二章草稿
Justin Lin
除錯、測試與效能
除錯、測試與效能
Justin Lin
Python 3 Programming Language
Python 3 Programming Language
Tahani Al-Manie
Python
Python
Shivam Gupta
資料結構
資料結構
Justin Lin
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
open() 與 io 模組
open() 與 io 模組
Justin Lin
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
Justin Lin
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
Justin Lin
常用內建模組
常用內建模組
Justin Lin
進階主題
進階主題
Justin Lin
型態與運算子
型態與運算子
Justin Lin
Python 起步走
Python 起步走
Justin Lin
初學R語言的60分鐘
初學R語言的60分鐘
Chen-Pan Liao
Destaque
(18)
類別的繼承
類別的繼承
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M44 - Overview of Web Development
Python Programming Essentials - M22 - File Operations
Python Programming Essentials - M22 - File Operations
《Python 3.5 技術手冊》第二章草稿
《Python 3.5 技術手冊》第二章草稿
除錯、測試與效能
除錯、測試與效能
Python 3 Programming Language
Python 3 Programming Language
Python
Python
資料結構
資料結構
從 REPL 到 IDE
從 REPL 到 IDE
open() 與 io 模組
open() 與 io 模組
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
常用內建模組
常用內建模組
進階主題
進階主題
型態與運算子
型態與運算子
Python 起步走
Python 起步走
初學R語言的60分鐘
初學R語言的60分鐘
Semelhante a 並行與平行
並行、平行與非同步
並行、平行與非同步
Justin Lin
6. 非同步設計
6. 非同步設計
Justin Lin
Notes of jcip
Notes of jcip
Dai Jun
线程与并发
线程与并发
Tony Deng
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
Multithread
Multithread
Medivh2011
SCJP ch15
SCJP ch15
r82093403
Noder eyes for frontend guys
Noder eyes for frontend guys
Hsu Ping Feng
Chapter2
Chapter2
Fang-Ling Lin
笔记
笔记
pzh244658240
Ian .net async programming
Ian .net async programming
LearningTech
Semelhante a 並行與平行
(11)
並行、平行與非同步
並行、平行與非同步
6. 非同步設計
6. 非同步設計
Notes of jcip
Notes of jcip
线程与并发
线程与并发
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Multithread
Multithread
SCJP ch15
SCJP ch15
Noder eyes for frontend guys
Noder eyes for frontend guys
Chapter2
Chapter2
笔记
笔记
Ian .net async programming
Ian .net async programming
Mais de Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch04 會話管理
Ch04 會話管理
Justin Lin
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
14. 進階主題
14. 進階主題
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
11. 常用內建模組
11. 常用內建模組
Justin Lin
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
9. 資料結構
9. 資料結構
Justin Lin
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
Mais de Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
14. 進階主題
14. 進階主題
12. 除錯、測試與效能
12. 除錯、測試與效能
11. 常用內建模組
11. 常用內建模組
10. 資料永續與交換
10. 資料永續與交換
9. 資料結構
9. 資料結構
8. open() 與 io 模組
8. open() 與 io 模組
並行與平行
1.
2.
13. 並行與平行 • 學習目標 –
認識並行與平行處理 – 使用 threading 模組 – 使用 multiprocessing 模組
3.
簡介執行緒
4.
5.
• 雖可以繼承 threading.Thread,
在 __init__()呼叫 super().__init__(), 並在類別中定義run()方法來實作執行緒 • 不過是不建議的,因為這會使得你的流程與 threading.Thread 產生相依性
6.
7.
8.
• python 直譯器同時間只允許執行一個執行 緒,因此並不是真正的平行(Parallel)處 理,只不過「有時候」切換速度快到人類 感覺上像是同時處理罷了 •
執行緒適用的場合之一,就是非計算密集 的場合,因為與其等待某個阻斷作業完成, 不如趁著等待的時間來進行其他執行緒
9.
10.
11.
• 對於計算密集的任務,使用執行緒不見得 會提高處理效率,反而容易因為直譯器必 須切換執行緒而耗費不必要的成本,使得 效率變差。
12.
• 如果主執行緒中啟動了額外執行緒,預設 會等待被啟動的所有執行緒都執行完才中 止程式。 • 如果一個
Thread 建立時,指定了daemon 參數為 True,在所有的非 Daemon 的執 行緒都結束時,程式就會直接終止 • 如果需要在背景執行一些常駐任務,就可 以指定 daemon 參數為 True。
13.
• 當執行緒使用 join()
加入至另一執行緒 時,另一執行緒會等待被加入的執行緒工 作完畢,然後再繼續它的動作
14.
• 如果要停止執行緒,必須自行實作,讓執 行緒跑完應有的流程
15.
競速、鎖定、死結 • 如果執行緒之間不需要共享資料, 或者共 享的資料是不可變動(Immutable)的型 態,事情會單純一些 •
然而,執行緒之間經常得共用一些可變動 狀態的資料… • 要是執行緒之間需要共享的是可變動狀態 的資料,就會有可能發生競速狀況…
16.
17.
• 若要避免競速的情況發生,就必須資源被 變更與取用時的關鍵程式碼進行鎖定
18.
19.
• threading.Lock 實作了情境管理器協定, 可以搭配
with 來簡化 acquire() 與 release() 的呼叫
20.
21.
• 由於執行緒無法取得鎖定時會造成阻斷, 不正確地使用 Lock
有可能造成效能低落, 另一問題則是死結
22.
23.
• threading.RLock 實現了可重入鎖 (Reentrant
lock) • 同一執行緒可以重複呼叫同一個 threading.RLock 實例的 acquire() 而不被阻斷 • release()時也要有對應於 acquire() 的次數,方可以完全解除鎖定 • threading.RLock 也實作了情境管理器 協定,可搭配 with 來使用
24.
• 另一個經常使用的鎖定機制是 threading.Condition • 某個執行緒在透過
acquire() 取得鎖定之 後,若需要在特定條件符合之前等待,可 以呼叫 wait() 方法,這會釋放鎖定 • 若其他執行緒的運作促成特定條件成立, 可以呼叫同一 threading.Condition 實 例的 notify(),通知等待條件的一個執 行緒可取得鎖定
25.
• 若等待中的執行緒取得鎖定,就會從上次 呼叫 wait()
方法處繼續執行 • 如果等待中的執行緒有多個,還可以呼叫 notify_all(),這會通知全部等待中的 執行緒爭取鎖定
26.
27.
28.
• 如果需要這種一進一出,在執行緒之間交 換資料的方式,Python 標準程式庫中提供 了
queue.Queue
29.
• 建立Semaphore 可指定計數器初始值 •
每呼叫一次 acquire(),計數器值遞減一, 在計數器為0 時若呼叫了 acquire(),執 行緒就會被阻斷 • 每呼叫一次 release(),計數器值遞增一, 如果 release()前計數器為 0,而且有執 行緒正在等待,在 release() 並遞增計數 器之後,會通知等待中的執行緒
30.
• 可以設定一個 Barrier
並指定數量 • 如果有執行緒先來到這個柵欄,它必須等 待其他執行緒也來到這個柵欄 • 指定的執行緒數量達到,全部執行緒才能 繼續往下執行
31.
32.
• 針對計算密集式的運算,若能在一個新的 行程(Process)平行(Parallel)運行,在 今日電腦普遍都有多個核心的情況下,就 有機會跑得更快一些。
33.
• subprocess 模組可以讓你在執行
Python 程式的過程中,產生新的子行程
34.
• 從 Python
3.5 開始,建議使用 run() 函 式來呼叫子行程 • subprocess.run() 執行之後會傳回 CompletedProcess 實例 • 若想要能取得標準輸出的執行結果:
35.
• 如果子行程必須接受標準輸入:
36.
• subprocess.run() 的底層是透過 subprocess.Popen()
實作出來的
37.
• subprocess.Popen() 執行程式,會立 即傳回
Popen 實例,不會等待子行程結束
38.
39.
• 如果想要以子行程來執行函式,然而使用 類似 threading
模組的 API 介面,那麼 可以使用 multiprocessing 模組
40.
41.
• 建議在使用 multiprocessing
模組時, 最好的方式是不要共享狀態 • 然而有時行程之間難免需要進行溝通, multiprocessing.Queue 是執行緒與行 程安全的,實作了必要的鎖定機制
42.
43.
44.
• multiprocessing.Lock 也實作了情境 管理器協定
Baixar agora