thread(執行緒)
process中的一段可執行物件,
是電腦中最小的執行單位,也是能在cpu schedling中的基本單位
可分為兩種
mutli thread process
single thread process
mutli thread process
一個process多個thread
結構如下
[code,data,file]
+[register][stack][thread]
+[register][stack][thread]
+[register][stack][thread]
+[regis……………….
single thread process
一個process一個thread
結構如下
[code,data,file]
+[registers,stack][thread]
ps:
code,data,file表示可在thread中分享的process的資源
ps:
static variable是在heap區,也就是在data中
auto variable是在stack區
ps:
single process+single thread process, ex:ms-dos
multi process+single thread process, ex:tradition unix
single process+multithread process, ex:java virtual machine
multi process+multithread process, ex:win2000,solaris,linux,…等
…
multithreading優點
主要有以下
responsiveness:程式可以同時做很多事
ex;word 顯示圖形,輸入資料,文法檢查
resource shaing: 相同process的thread共享code和global變數等資訊
ps:若是process之間的共享需透過IPC機制
economy:使用的資源較少,thread switching比context switching更節省資源
scalability:
可在single-thread的CPU上執行,
在multithread的CPU上也可以有很好的效能,若在多core多thread效能更好
ps:
user thread只可得到resource sharing,econmy二個優點
ps:
實作上的挑戰
主要有以下
dividing activities 將工作平均切開以分配給不同的thread
balance
data splitting
data dependency
testing and debugging
………………………………….
thread level
依層級分為以下兩類
ULT(user-level thread)
使用ULT library管理thread
不會使用到system call
os查覺不到thread的存在
ex:posix pthreads,win32 threads,java threads
KLT(kernel-level thread)
由os管理thread
會用到system call
ex:windows,solaris,linux,mac os x,tru64 unix
ps:
上述兩者都由user space執行
ps:
kernel thread表示kernel可以提供thread功能,並不代表kernel本身是跑multithread
…….
multithreading modes
主要有以下
many-to-one model
多個user thread 對應1個kernel thread
kernel只會認為只有一個thread,因為不知上層狀況
不支援parallel
entire process will blocked if a thread makes a blocking system call
通常用在不支援multithread的os
ex:solaris green threads,gun portable threads
one-to-one model
各別user thread 對應各個kernel thread
more concurrency, allowing another thread to run when a thread makes a blocking system call
限制thread 數量,因為一個kernel thread會佔用一部份資源
kernel認為有多個thread
ex:win nt,xp,2000,linux,solaris9 and later
many-to-many model
多個user thread對應較少kernel thread
kernl不知上層狀況
不限制thread 數量
支援parallel
ex:winnt/2000
two-level model
ex:IRIX,HP-UX,tru64 UNIX,solaris8
………………………..
thread libraries
用來實作thread program,
主要有兩種
library entirely in user space
kernel-level library
pthreads
依據ieee 1003.1c標準定義,
POSIX stand API for thread
可用在user-level和kernel-level
常用在一般unix作業系統
implicit threading
thread pools
openMP
grand central dispatch
TBB(threading building blocks)
thread pool
產生多個thread,並等待執行
使用現有thread比新產生一個thread快
同時等待執行的數目前依thread pool大小決定
…………………
threading issue
semantics of fork() and exec()
fork呼叫一個thread或all thread?
thread cancellation
分為三種
asynchronous cancellation:立刻取消
deferred cancellation:一個時間周期到才會取消
actual cancellation:根據thread狀態取消
signal handling
singal type
synchronous signal ex:illegal memory access,division by zero
asynchronous signal ex:crtl+c
signal handler:負責處理signal
default 由編輯器自動載入預設的訊號處理
user-defined 自行定義訊號的處理
TLS(thread-local storage)
允許每個thread有自己的獨立空間
可解決如何區分那一個thread是老大老二老三,
scheduler activations
在user-level thread library與kernel之間通訊的技巧
LWP(light weight process)
介於user-level thread和kernel-level thread的資料結構
用來提供一個virtual process讓應用程式thread做schedule
支援多個User-level Thread,對應到一個kernel thread
屬於kernel-level thread