{eval=Array;=+count(Array);}
舉個(gè)例子 有一千塊磚要卸貨,
單線程就是一個(gè)人干活。卸得慢
雙線程就是兩個(gè)人干活。卸貨時(shí)間快了一倍
四線程就是4個(gè)人卸貨。卸貨時(shí)間快了4倍
進(jìn)程是同時(shí)進(jìn)行,跟cpu核數(shù)有關(guān)系,線程是在同一個(gè)時(shí)間段輪流交替執(zhí)行任務(wù),可能線程A執(zhí)行了一半卡住了,這時(shí)候線程B繼續(xù)執(zhí)行
舉個(gè)栗子,就是一個(gè)人能同時(shí)干多件事兒 ,劈柴的同時(shí)又喂馬,兩不耽誤。多線程所有的數(shù)據(jù)都是共享的。
1.概念
進(jìn)程:運(yùn)行中的程序。 線程:一個(gè)程序中的多個(gè)執(zhí)行路徑。更準(zhǔn)確的定義是:線程是一個(gè)進(jìn)程內(nèi)部的一個(gè)控制序列。
2.為什么要有線程?
用fork調(diào)用進(jìn)程代價(jià)太高,需要讓一個(gè)進(jìn)程同時(shí)做多件事情,線程就非常有用。
3.線程的優(yōu)點(diǎn)和缺點(diǎn)。
優(yōu)點(diǎn):
(1)有時(shí),讓程序看起來是在同時(shí)做兩件事是非常有用的。 比如在編輯文檔時(shí),還能統(tǒng)計(jì)文檔里的單詞個(gè)數(shù)。
(2)一個(gè)混雜著輸入、計(jì)算、輸出的程序,利用線程可以將這3個(gè)部 分分成3個(gè)線程來執(zhí)行,從而改變程序執(zhí)行的性能。
(3)一般來說,線程之間切換需要操作系統(tǒng)所做的工作比進(jìn)程間切換需要的代價(jià)小。
缺點(diǎn):
(1)編寫線程需要非常仔細(xì)的設(shè)計(jì)。
(2)對多線程的調(diào)試?yán)щy程度比單線程調(diào)試大得多。
4.創(chuàng)建線程
Linux系統(tǒng)支持POSIX多線程接口,稱為pthread。
編寫linux下的多線程程序,需要包含頭文件pthread.h,鏈接時(shí)需要使用庫libpthread.a。
如果在主線程里面創(chuàng)建線程,程序就會(huì)在創(chuàng)建線程的地方產(chǎn)生分支,變成兩個(gè)部分執(zhí)行。線程的創(chuàng)建通過函數(shù)pthread_create來完成。成功返回0。
一個(gè)簡單的創(chuàng)建多線程的程序:
輸出結(jié)果
以上就是Linux 多線程的實(shí)例詳解,感謝閱讀,希望能幫助到大家!
例如程序的執(zhí)行都是從main進(jìn)程開始,如果在main創(chuàng)建多線程,比如線程1 2 3,那么CPU就會(huì)并發(fā)運(yùn)行線程1 2 3 以及main ,互不影響
Linux的線程是通過輕量化線程實(shí)現(xiàn)的,其實(shí)和普通進(jìn)程沒有本質(zhì)的區(qū)別,但是線程之間的可以訪問彼此的一些數(shù)據(jù)、段和文件等等。
輕量化進(jìn)程是Linux用來解決單純進(jìn)程切換開銷太大的問題,通過創(chuàng)建線程組的方式來將屬于同一個(gè)進(jìn)程的不同線程放在一起,實(shí)現(xiàn)部分?jǐn)?shù)據(jù)共享,調(diào)度和通信在線程組里面都會(huì)非常方便和快速。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答