4.26
因為一個process要service一個client。要很久時間
4.27
responsiveness: 即使program的某一部分(thread)被block了還是可以運作
Resource sharing: 同一個address space的thread之間可以共享資源。
Economy: 建立thread比建立process更經濟
Multiple threads可以在multiple processor上執行,增加效率
4.28
一種是code和data都在user space中
一種是實作kernel-level library,那麼code和data structure都會在kernel space中。
4.29
一種是從Thread class繼承,並override run()方法。
或者是實作interface the Runnable。也要定義run()方法。
run()中的code就會在不同的thread中執行。
4.30
start()會allocate memory並initialize new thread,接著他會呼叫run(),使thread有能力被JVM運行。run從來不會直接被呼叫。
4.31
一種fork會複製所有的thread
另外一種則是只有呼叫fork()的thread會被複製。
如果forking之後馬上就執行exec(),那麼並不需要複製所有thread,因為exec()中的program會取代process。
反之則要複製所有thread。
4.32
deferred: 延期的
在asynchronous cancellation中,thread馬上會被關閉,這樣挺危險的
deferred cancellation中thread會自己決定什麼時候關閉。
4.33
在process啟動時,thread pool會被建立,裡面是很多thread,並且等待工作指派到他們頭上。這樣就可以限制process中的thread數量,並且減少建立和結束thread的overhead。
4.34
Windows的thread包含:
a unique ID
用來表示the status of the processor的register set
a user stack for user mode
a kernel stack for kernel mode(所以每個thread都會有兩個stack!!?)
還有一個私密儲存小空間,給run-time libraries和dynamic link libraries使用。
4.35
clone()產生的process和舊的process共享address space。
(也就是和windows底下的CreateProcess相同?)
4.36
Multicore system更難設計 不論是對系統 或對應用
要如何把應用程式分成可以在不同core以parallel運行
task必須balanced
data也必須分開,給不同的task使用
必須能夠確定data dependencies
且data accesses必須要是synchronized的,這樣才會安全
最後則是testing和debugging such application
4.37
concurrent將工作拆成小份並讓他們輪流進行
parallel則是真的可以同時進行
4.38
Data paralleism將資料拆成多份並且同時對他們進行同樣的operation
Task paralleism則是將task拆成多份並且在不同的core上面進行不同的operation
4.39
OpenMP提供的是compiler directive(指令),programmer使用#pragma omp parallel來指定哪個部分可以多個threads平行處理。
4.40
跳過
因為一個process要service一個client。要很久時間
4.27
responsiveness: 即使program的某一部分(thread)被block了還是可以運作
Resource sharing: 同一個address space的thread之間可以共享資源。
Economy: 建立thread比建立process更經濟
Multiple threads可以在multiple processor上執行,增加效率
4.28
一種是code和data都在user space中
一種是實作kernel-level library,那麼code和data structure都會在kernel space中。
4.29
一種是從Thread class繼承,並override run()方法。
或者是實作interface the Runnable。也要定義run()方法。
run()中的code就會在不同的thread中執行。
4.30
start()會allocate memory並initialize new thread,接著他會呼叫run(),使thread有能力被JVM運行。run從來不會直接被呼叫。
4.31
一種fork會複製所有的thread
另外一種則是只有呼叫fork()的thread會被複製。
如果forking之後馬上就執行exec(),那麼並不需要複製所有thread,因為exec()中的program會取代process。
反之則要複製所有thread。
4.32
deferred: 延期的
在asynchronous cancellation中,thread馬上會被關閉,這樣挺危險的
deferred cancellation中thread會自己決定什麼時候關閉。
4.33
在process啟動時,thread pool會被建立,裡面是很多thread,並且等待工作指派到他們頭上。這樣就可以限制process中的thread數量,並且減少建立和結束thread的overhead。
4.34
Windows的thread包含:
a unique ID
用來表示the status of the processor的register set
a user stack for user mode
a kernel stack for kernel mode(所以每個thread都會有兩個stack!!?)
還有一個私密儲存小空間,給run-time libraries和dynamic link libraries使用。
4.35
clone()產生的process和舊的process共享address space。
(也就是和windows底下的CreateProcess相同?)
4.36
Multicore system更難設計 不論是對系統 或對應用
要如何把應用程式分成可以在不同core以parallel運行
task必須balanced
data也必須分開,給不同的task使用
必須能夠確定data dependencies
且data accesses必須要是synchronized的,這樣才會安全
最後則是testing和debugging such application
4.37
concurrent將工作拆成小份並讓他們輪流進行
parallel則是真的可以同時進行
4.38
Data paralleism將資料拆成多份並且同時對他們進行同樣的operation
Task paralleism則是將task拆成多份並且在不同的core上面進行不同的operation
4.39
OpenMP提供的是compiler directive(指令),programmer使用#pragma omp parallel來指定哪個部分可以多個threads平行處理。
4.40
跳過
留言
張貼留言