使用多執行緒為什麼可以提高效率呢?
io是關鍵。很多的應用要使用io,但是cpu是很快的,io往往是很慢的。
看**main1.c
#include #include #include #include #include #include char *p;
void sys_error(int errnum)
void *
func(void *arg)
; int i = 0;
for (;i<10000000;++i)
return null;
}int
main(void)
pthread_exit(null);
}
main2.c
#include #include #include #include #include char *p;
void sys_error(int errnum)
void *
func(void *arg)
; int i = 0;
for (;i<10000000;++i)
return null;
}int
main(void)
main1.c 是5個多執行緒,每個執行緒執行一次func函式,func函式有大量的io操作。
main2.c是只有乙個程序,呼叫了5次func函式,func函式有大量的io.
其中demo對應多執行緒的,a.out對應單程序的。
可以發現多執行緒的程式執行時間2.59 比2.74要少點,此時說明使用多執行緒的效果比單程序要好。因為多執行緒在乙個執行緒io的時候,cpu又去處理別的執行緒了,這樣就提高了工作效率。而單程序即使cpu是空閒的,因為沒有被的執行緒可以切換,只能在這裡幹等。而且在執行程式的時候可以發現,執行多執行緒的時候列印的資料是迅速的列印出來,然後處於等待狀態。而單程序的列印時等一會列印乙個,再等一會再列印乙個。這也可以驗證確實是這樣的。
但是當io的工作量很小時,多執行緒沒有提高效率,而且增加了執行緒切換的消耗,效率反而降低。
把上面的對應函式的大量的io去掉之後,總體的執行時間都減少了很多,而且多執行緒反而更慢。是0.04s,單程序是0.02s.
總結:當工作中io比較多的時候,可以使用多執行緒提高效率。此時執行緒和執行緒是可以天然的非同步工作。
MFC 1 什麼時候該使用多執行緒
什麼時候該使用多執行緒,以及更恰當的多執行緒程式設計方法之討論 大約在寫了一年左右的應用程式以後開始發生了一些困惑,在我寫的程式中很多使用了多執行緒,我們了解使用執行緒的必要性,但是什麼時候使用,以及該如何更好使用和管理多執行緒方面,我覺得值得思考。這裡要指出的幾點是 注 以下所說的子執行緒皆指輔助...
什麼時候使用引用 什麼時候使用指標
使用引用引數的主要原因有兩個 程式設計師能修改呼叫函式中的資料物件 通過傳遞引用而不是整個資料 物件,可以提高程式的執行速度一般的原則 對於使用引用的值而不做修改的函式 如果資料物件很小,如內建資料型別或者小型結構,則按照值傳遞 如果資料物件是陣列,則使用指標 唯一的選擇 並且指標宣告為指向cons...
什麼時候使用抽象類, 什麼時候使用介面
介面是一種協定,抽象類則相當於類模板。使用抽象類,而不要使用介面來分離協定與實現。如果需要提供多型層次結構的值型別,使用介面。如果乙個型別必須實現多個協定,或者協定適用於多種型別,使用介面。雖然抽象類和介面都支援將協定與實現分離開來,但介面不能指定以後版本中的新成員,而抽象類可以根據需要新增成員以支...