緊接著來探討Thread,我們可以把一個thread看成是一個控制流程,再引入thread觀念後,就可能需要重新修改傳統process之觀念;一個傳統process只代表一個控制流程,也就是一個傳統process中只存在一個thread,而引入thread觀念後,一個process中可存在多個threads。
Thread是執行的單元,而process是資源配置的單元,支援thread之作業系統核心分配一個CPU給一個thread,再分配一個記憶體空間給一個process,接著分配I/O及檔案資源給一個process。
而在同一個process中的所有threads則共享這些記憶體空間及資源,如下圖(左邊)所示,傳統的process為single-threaded process;一個process擁有一套registers、stack、code、data及所開的檔案。
在引入thread觀念後,一個process可以有多個thread,每個thread都有各自的register與stack,如下圖(右邊)所示,但code、data、files則是配置給一個process且供其中之threads共用。
了解Thread的概念後,接著來看看它還具備了什麼用途:
Thread常被運用在網路伺服器之設計上,以Web server為例,Web server常需服務大量用戶請求,若以一個傳統single-thread的process來實現web server,當web server在服務某個請求而需讀取網頁之檔案時,可能會導致web server進入等待狀態(假如web server用synchronous I/O讀檔案)。
此時雖有許多用戶等待服務,web server卻也不能去服務,導致用戶較長的等待時間,Web server之服務效能不佳,如下圖(1)。
若web server以create_process方式,在每次有用戶請求時產生一個process以服務一個用戶,此方法可以使web server同時服務多個用戶,但create_process ,及 切換prcoess執行之overheads很高,因此不見得有好效能,如下圖(2)。
若web server以create_thread方式,在每次有用戶請求時產生一個thread以服務一個用戶,此方法可以使web server的服務效能增加,因create_thread ,及在同一個process中切換thread執行之overheads較低,如下圖(3)。
由此可知,現在thread在應用上多採用多工的處理方式,其實不僅僅是thread而已,目前許多與電腦相關的概念也大多採取多工的方法,雖然可能會有一些未知的錯誤情況產生,不過技術的進步相信也同時能夠對其作良好的改進,達到處理效能極至的境界。
2009年6月9日 星期二
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言