Thread

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