多線程的自然分裂管理法

多線程在一般環境下通常是分主副線程,主線程負責進行線程調度.具體負責的是線程的創建,

流程如:主線程接受任務->根據任務創建線程->子線程處理任務->結束退出

更高階的處理模式如線程池:主線程創建若干子線程->子線程聞訊堆棧是否有任務->有任務處理之->等待新的任務->被新任務事件觸發後處理任務->回到等待新任務

注意如上處理過程有個共同點就是子線程沒有創建新線程的權利.

多線程的自然分裂管理法的意識就是不區分主副線程.

當一個線程開始時,是否創建新線程由這個線程根據當前情況決定.

例如當前處理的堆棧超過一定數量,不能滿足處理需求時,邏輯線程主動創建一個新線程來處理,

當前堆棧少於一定數量,並且線程計數大於某些值的情況下就可以申請銷燬自己.

也就是一個線程是否創建或銷燬完全由當前線程根據實際情況判斷.

線程數量的多寡,甚至是否會導致頻繁創建線程,這些都是可以控制的.

自然分裂的優勢不在於等待任務,而是處理那些不相干任務時減少跨線程的通訊.

發現任務不能處理之後可以主動分裂線程,因爲是數據的所有權在整個分裂過程中都是多線程安全的.

分離之後也是多線程安全的,形成傘形的發散,直到所有任務被處理完畢,線程自動銷燬.

在一些可以形成新任務的場合,如網絡句柄中的listen和connect,

積攢到一定數量的句柄後就可以產生分離,

純鏈接的數據句柄在所有句柄都斷開鏈接後就可以主動銷燬.

而其他有繁殖能力的句柄又會產生新的分離,形成美妙的場景.


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