回覆列表
  • 1 # fglgr47457

     每個正在系統上執行的程式都是一個程序。每個程序包含一到多個執行緒。程序也可能是整個程式或者是部分程式的動態執行。執行緒是一組指令的集合,或者是程式的特殊段,它可以在程式裡獨立執行。也可以把它理解為程式碼執行的上下文。所以執行緒基本上是輕量級的程序,它負責在單個程式裡執行多工。通常由作業系統負責多個執行緒的排程和執行。  什麼是多執行緒?  多執行緒是為了使得多個執行緒並行的工作以完成多項任務,以提高系統的效率。執行緒是在同一時間需要完成多項任務的時候被實現的。  使用執行緒的好處有以下幾點:  ·使用執行緒可以把佔據長時間的程式中的任務放到後臺去處理  ·使用者介面可以更加吸引人,這樣比如使用者點選了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度  ·程式的執行速度可能加快  ·在一些等待的任務實現上如使用者輸入、檔案讀寫和網路收發資料等,執行緒就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如記憶體佔用等等。  還有其他很多使用多執行緒的好處,這裡就不一一說明了。  一些執行緒模型的背景  我們可以重點討論一下在Win32環境中常用的一些模型。  ·單執行緒模型  在這種執行緒模型中,一個程序中只能有一個執行緒,剩下的程序必須等待當前的執行緒執行完。這種模型的缺點在於系統完成一個很小的任務都必須佔用很長的時間。  ·塊執行緒模型(單執行緒多塊模型STA)  這種模型裡,一個程式裡可能會包含多個執行的執行緒。在這裡,每個執行緒被分為程序裡一個單獨的塊。每個程序可以含有多個塊,可以共享多個塊中的資料。程式規定了每個塊中執行緒的執行時間。所有的請求透過Windows訊息佇列進行序列化,這樣保證了每個時刻只能訪問一個塊,因而只有一個單獨的程序可以在某一個時刻得到執行。這種模型比單執行緒模型的好處在於,可以響應同一時刻的多個使用者請求的任務而不只是單個使用者請求。但它的效能還不是很好,因為它使用了序列化的執行緒模型,任務是一個接一個得到執行的。  ·多執行緒塊模型(自由執行緒塊模型)  多執行緒塊模型(MTA)在每個程序裡只有一個塊而不是多個塊。這單個塊控制著多個執行緒而不是單個執行緒。這裡不需要訊息佇列,因為所有的執行緒都是相同的塊的一個部分,並且可以共享。這樣的程式比單執行緒模型和STA的執行速度都要塊,因為降低了系統的負載,因而可以最佳化來減少系統idle的時間。這些應用程式一般比較複雜,因為程式設計師必須提供執行緒同步以保證執行緒不會併發的請求相同的資源,因而導致競爭情況的發生。這裡有必要提供一個鎖機制。但是這樣也許會導致系統死鎖的發生。

  • 中秋節和大豐收的關聯?
  • 剛買的梔子花澆酸奶沒事吧?