單執行緒的也就是程式執行時,所跑的程式路徑(處理的東西)是連續順序下來的,必須前面的處理好,後面的彩繪執行到。
多執行緒嘛,舉個例子也就是說程式可以同時執行2個以上相同類似的操作,比如一些搜尋代理或者群發email的多執行緒軟體,由於操作一次需要網路的返回資訊 花的時間比較長,而對cpu來說卻是空閒的,如果是一個一個順序執行,那麼搜尋幾千個IP就會花上好久好久。
而如果用多執行緒就可以在等待期間 加入其他的搜尋,然後等待,這樣可以提高效率。
不過多執行緒和多程序公用一些資源時要考慮的問題好像也是一樣的,對於一些公共資源或者公共變數的訪問和修改時要注意特別的,需要一些鎖定什麼的,還有順序問題的考慮。
多執行緒程式設計的目的,就是"最大限度地利用CPU資源",當某一執行緒的處理不需要佔用CPU而只和I/O,OEMBIOS等資源打交道時,讓需要佔用CPU資源的其它執行緒有機會獲得CPU資源。
每個程式執行時都會產生一個程序,而每一個程序至少要有一個主執行緒。
這個執行緒其實是程序執行的一條線索,除了主執行緒外還可以給程序增加其它的執行緒,也即增加其它的執行線索,由此在某種程度上可以看成是給一個應用程式增加了多工功能。
當程式執行後,可以根據各種條件掛起或執行這些執行緒,尤其在多CPU的環境中,這些執行緒是併發執行的。
多執行緒就是在一個程序內有多個執行緒。
從而使一個應用程式有了多工的功能。
多程序技術也可以實現這一點,但是建立程序的高消耗(每個程序都有獨立的資料和程式碼空間),程序之間通訊的不方便(訊息機制),程序切換的時間太長,這些導致了多執行緒的提出,對於單CPU來說(沒有開啟超執行緒),在同一時間只能執行一個執行緒,所以如果想實現多工,那麼就只能每個程序或執行緒獲得一個時間片,在某個時間片內,只能一個執行緒執行,然後按照某種策略換其他執行緒執行。
由於時間片很短,這樣給使用者的感覺是同時有好多執行緒在執行。
但是執行緒切換是有代價的,因此如果採用多程序,那麼就需要將執行緒所隸屬的該程序所需要的記憶體進行切換,這時間代價是很多的。
而執行緒切換代價就很少,執行緒是可以共享記憶體的。
所以採用多執行緒在切換上花費的比多程序少得多。
但是,執行緒切換還是需要時間消耗的,所以採用一個擁有兩個執行緒的程序執行所需要的時間比一個執行緒的程序執行兩次所需要的時間要多一些。
即採用多執行緒不會提高程式的執行速度,反而會降低速度,但是對於使用者來說,可以減少使用者的響應時間。
上述結果只是針對單CPU,如果對於多CPU或者CPU採用超執行緒技術,採用多執行緒技術還是會提高程式的執行速度的。
因為單執行緒只會對映到一個CPU上,而多執行緒會對映到多個CPU上,超執行緒技術本質是多執行緒硬體化,所以也會加快程式的執行速度。
單執行緒的也就是程式執行時,所跑的程式路徑(處理的東西)是連續順序下來的,必須前面的處理好,後面的彩繪執行到。
多執行緒嘛,舉個例子也就是說程式可以同時執行2個以上相同類似的操作,比如一些搜尋代理或者群發email的多執行緒軟體,由於操作一次需要網路的返回資訊 花的時間比較長,而對cpu來說卻是空閒的,如果是一個一個順序執行,那麼搜尋幾千個IP就會花上好久好久。
而如果用多執行緒就可以在等待期間 加入其他的搜尋,然後等待,這樣可以提高效率。
不過多執行緒和多程序公用一些資源時要考慮的問題好像也是一樣的,對於一些公共資源或者公共變數的訪問和修改時要注意特別的,需要一些鎖定什麼的,還有順序問題的考慮。
多執行緒程式設計的目的,就是"最大限度地利用CPU資源",當某一執行緒的處理不需要佔用CPU而只和I/O,OEMBIOS等資源打交道時,讓需要佔用CPU資源的其它執行緒有機會獲得CPU資源。
每個程式執行時都會產生一個程序,而每一個程序至少要有一個主執行緒。
這個執行緒其實是程序執行的一條線索,除了主執行緒外還可以給程序增加其它的執行緒,也即增加其它的執行線索,由此在某種程度上可以看成是給一個應用程式增加了多工功能。
當程式執行後,可以根據各種條件掛起或執行這些執行緒,尤其在多CPU的環境中,這些執行緒是併發執行的。
多執行緒就是在一個程序內有多個執行緒。
從而使一個應用程式有了多工的功能。
多程序技術也可以實現這一點,但是建立程序的高消耗(每個程序都有獨立的資料和程式碼空間),程序之間通訊的不方便(訊息機制),程序切換的時間太長,這些導致了多執行緒的提出,對於單CPU來說(沒有開啟超執行緒),在同一時間只能執行一個執行緒,所以如果想實現多工,那麼就只能每個程序或執行緒獲得一個時間片,在某個時間片內,只能一個執行緒執行,然後按照某種策略換其他執行緒執行。
由於時間片很短,這樣給使用者的感覺是同時有好多執行緒在執行。
但是執行緒切換是有代價的,因此如果採用多程序,那麼就需要將執行緒所隸屬的該程序所需要的記憶體進行切換,這時間代價是很多的。
而執行緒切換代價就很少,執行緒是可以共享記憶體的。
所以採用多執行緒在切換上花費的比多程序少得多。
但是,執行緒切換還是需要時間消耗的,所以採用一個擁有兩個執行緒的程序執行所需要的時間比一個執行緒的程序執行兩次所需要的時間要多一些。
即採用多執行緒不會提高程式的執行速度,反而會降低速度,但是對於使用者來說,可以減少使用者的響應時間。
上述結果只是針對單CPU,如果對於多CPU或者CPU採用超執行緒技術,採用多執行緒技術還是會提高程式的執行速度的。
因為單執行緒只會對映到一個CPU上,而多執行緒會對映到多個CPU上,超執行緒技術本質是多執行緒硬體化,所以也會加快程式的執行速度。