線程池linux
① linux c如何創建線程池
linux c 並沒有自帶的線程池,純C的線程池很少
1:使用glib的線程池,gthreadpool,這個是linux C 下面的一個線程池實現,可以用於生產環境。
2:自己設計線程池,但是設計一個工業強度的線程池是一件非常復雜的事情,尤其用C來實現。一般思路就是建立一個線程池管理函數,一個線程函數並創建一組線程,一個全局的線程狀態數組,線程管理函數通過全局線程狀態數組來分派任務,線程函數更改自己的線程狀態來上報自己的運行情況,實現起來還是相當復雜的。
建議不要重復造輪子,直接使用現有的線程池實現,glib是很好的選擇。
② linux下 c 語言線程池怎麼調用
1 使用線程池的原因
通常使用多線程都是在需要的時候創建一個新的線程,然後執行任務,完成後退出。一般情況下是完全夠滿足我們的程序的。
但是當我們需要創建大量的線程,並且執行一個簡單的任務之後銷毀,比如:在web,email,db裡面的一些應用,如彩鈴,或者網路通信編程,或者雲計算裡面後台鏡像處理的時候,我們的應用在任何時候都要准備面對數目巨大的連接請求,同時,這些請求執行的任務卻又比較簡單,佔用的時間很少,這樣我們可能就會處於不停的創建線程並銷毀線程的狀態。雖說比起進程的創建,線程的創建時間已經大大縮短,但是如果需要頻繁的創建線程,並且每個線程所佔用的處理時間又非常簡短,則線程創建和銷毀帶給處理器的額外負擔也是很可觀的。
線程池的作用正是在這種情況下有效的降低頻繁創建銷毀線程所帶來的額外開銷。一般來說,線程池都是採用預創建的技術,在應用啟動之初便預先創建一定數目的線程。應用在運行的過程中,需要時可以從這些線程所組成的線程池裡申請分配一個空閑的線程,來執行一定的任務,任務完成後,並不是將線程銷毀,而是將它返還給線程池,由線程池自行管理。如果線程池中預先分配的線程已經全部分配完畢,但此時又有新的任務請求,則線程池會動態的創建新的線程去適應這個請求。當然,有可能,某些時段應用並不需要執行很多的任務,導致了線程池中的線程大多處於空閑的狀態,為了節省系統資源,線程池就需要動態的銷毀其中的一部分空閑線程。因此,線程池都需要一個管理者,按照一定的要求去動態的維護其中線程的數目。
當然,如果線程創建和銷毀時間相比任務執行時間可以忽略不計,則沒有必要使用線程池了。
③ Linux 線程池 的問題
assert(條件為真,不退出)
編線程池,注意並發,這個最重要,一般都是被動式,也就是說先睡眠,等待被喚醒
④ linux下一個線程佔用多少內存
Linux中線程本身是有自己的棧的,這個空間默認是10240,單位是K,所以默認佔用10M的內存,但是這是最少的,如果線程中,程序員也是用了內存,那就是大於10M,所以線程最低佔用的內存通過ulimit -s查看。