看板 uefacool
作者 標題 [RTOS] Thread,Process,Module
時間 2011年07月17日 Sun. AM 09:02:12
Thread,Process,Module
http://blog.yam.com/swwuyam/article/11168032
20070822
Thread中文翻為執行緒 當有兩個以上執行緒同時在跑就叫做多執行緒(multi-thread)
兩個執行緒就好像是有兩個人在做事
如果其中一個人被擋住了 另外一個人還是可以繼續做他的事
在應用上 我們寫的程式有時候會要做一些比較需要花時間的事情
我們便可以開另外一個執行緒來做
一個負責使用者介面 另外一個負責較重的工作
這樣就不會影響到程式的正常運作
process為行程的意思 在window系統中 所有的程式都受到保護不會受到其他程式干擾
而這保護的單位 就叫做process
在同一個process之中 記憶體是可以互相存取的(即使是不同執行緒)
但是不同的process 記憶體空間是不能任意存取的
通常一個執行檔就構成一個process 但也可以載入其他的.dll檔案
且一個process中 只能有一個執行檔
module中文叫做模組 為組成process的元件
module通常是執行檔(.exe) 或者是動態連結檔(.dll)
一個process可以包含許多module
比方說一個執行檔可以連結五個動態連結檔組成一個process
但是同時只能有一個執行檔
簡單的講thread是時間的概念 而process,module為空間的概念
************************************************
http://www.sylin.net/blog/2009/01/14/144
2009
Process 和 Thread 的差別
Process
Heavy weight, 獨立的Program Segment、Data Segment, OS resource 等, 但切換時(Context Switch),
CPU 需將當前 Process 的狀態保存起來,再載入下一個要執行的 Process 的狀態,負責儲存這個狀態的稱為PCB
(Process Controll Block,或稱 Process Descriptor)
Thread
Light weight process (LWP),有自己的 program counter, register set, stack space, no (or a little) context switch
每個 Thread 有自己的 PC, register set, stack space 表示 thread 可以有自己的 call graph 來執行程式。
一個Process中的Thread共用Address Space(包括Program/Data Segment、Resource),
因此切換Thread時不需要切換/複製Address Space,處理代價相對輕很多。
***************************************************
#Threads 誕生
當我們的 application 希望能同時執行多個不需 serialized 的 tasks 時,唯一的方法就是呼叫 System call -----fork(),
產生另外的Processes去執行,因為彼此互相獨立,所以之間的溝通必須藉 IPC 來支援.
(例如傳統的 Server 處理 Client連線).這樣雖然能滿足需要,但卻像用土法煉鋼,存在許多缺點.
增加系統的 Overhead ----- fork 是代價高昂的 System call.
浪費系統資源 ----- 如:佔用 memory space.
增加系統的管理工作 ----- 如: Message passing,gather result,以及最重要的Process protection的問題.
因此,開始有人試著提出不同的方法來解決這樣的需求------ 所以 Threads 應運而生!!
#什麼是Thread?
http://www.csie.nctu.edu.tw/~idchen/2-0.htm
Thread is light weight process(LWP)
一個Thread 就是一個小型的 Process ,若我們把 Process 分為兩個部份-----
Threads 和 Resources,Threads 就是這個 Process 的動態執行者(Dynamic Object),
而每一個 Thread 的開頭就是這個程式的一個 Control Point.
因為同屬一個Process,所以 Thread 的 context switch 不同於Process 的 context switch,
因為後者必須做 Address space 的置換(很費時).
傳統的 UNIX Process 就是一個 單一 Thread 的 Process. 而另外也有 Multithread in uniproceeor and on multiprocessors.
而因為一個 Thread 是一個小型的 Process, 所以它必須有自己的 PC (Program Counter), Stack 和 Register Set,
以儲存被 context switch 時, 相關 registers 的內容.
#Thread 的種類
Thread 的種類有很多種,每一種有它自己的特性和使用方式,
在這裡我們介紹三種重要的 Threads ---- Kernel Thread, Lightweight Process and User Thread.
Kernel Thread ---- 即 Thread 由 Kernel Create 和 Distory, 共同生活在 Kernel space中.
Lightweight Process ---- 它特別是指給 User用的 Kernel Thread,因為 Kernel Thread 分為給user用和自己用的兩部份
(asychronous I/O, ex: disk write),所以 Lightweight Process 也就是 Kernel Thread.
User Thread ---- 由 Library 提供,舉凡它的 Creating, Scheduling, Synchronization, Managing...
都由 Library 負責, Kernel 完全不知道它的存在.
#Thread 設計的考量
http://www.csie.nctu.edu.tw/~idchen/4-0.htm
--
※ 作者: uefangsmith 時間: 2011-07-17 09:02:12
※ 編輯: uefangsmith 時間: 2011-07-17 09:28:46
※ 看板: uefacool 文章推薦值: 0 目前人氣: 0 累積人氣: 34
回列表(←)
分享