關於線程池的設計和使用場景·淺析

線程池的設計

對於線程池可以有很對中設計,最常見的有master-slave模型,和通用線程池。
1. master-slave:一個主控線程和多個工作線程,線程池的調度由master線程來執行。
2. 通用線程池,如常見的半同步半異步線程池。線程池中的所有線程的地位平等,線程池的所有線程平等競爭池中的任務(variable_condition)
3. 設計線程池的原因:線程池的目的在於更大效率的使用線程(增大線程的利用率)

半同步半異步線程池

線程池的使用場景

一般的情況下,我們對線程池的設計遵循泛型的設計,就是可以向線程池中投遞任意類型的task,這一點使用閉包(lambda)可以很容易就實現。線程池的使用場景更應該是task之間相互獨立的情況下效率會更高。

設有如下場景:
	Resource A;
	threadpool thpool(10);//線程池中有10個線程.
	thpool.commit([]{
		A;//....使用資源A
		//.....
	});

	thpool.commit(
		A;//...
		//.....
		);

將兩個task都投遞到線程池,由兩個線程得到task,執行,但是兩個線程執行過程中都會涉及到對資源A的使用,那麼此時
將在資源A產生資源競爭,就需要進行同步。其中某一個線程就需要等待,這大大減少了線程的利用率,特別是在資源競爭頻繁的情況下。

所以,可以得到如下總結:線程池的設計是爲了增大線程的使用效率,線程池適合task之間耦合性小(資源競爭小)的情景。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章