線程的概念:
1、在一個(gè)程序里的一個(gè)執(zhí)行路線就叫做線程。更準(zhǔn)確的定義為:線程是“一個(gè)進(jìn)程內(nèi)部的控制序列”。
2、一切進(jìn)程至少都有一個(gè)執(zhí)行線程。
進(jìn)程和線程的區(qū)別:
1、進(jìn)程是資源競爭的基本單位。
2、線程是程序執(zhí)行的最小單位。
3、線程共享進(jìn)程數(shù)據(jù),但也擁有自己的一部分?jǐn)?shù)據(jù)。
線程的優(yōu)點(diǎn):
1、創(chuàng)建一個(gè)新線程的代價(jià)要比創(chuàng)建一個(gè)新進(jìn)程的代價(jià)小得多。
2、與進(jìn)程之間的切換相比,線程之間的切換需要操作系統(tǒng)做的工作要少得多。
3、線程占用的資源要比進(jìn)程少得多。
4、能充分利用多處理器的可并行數(shù)量。
5、在等待慢速I/O操作結(jié)束的同時(shí),程序可執(zhí)行其他的計(jì)算任務(wù)。
6、計(jì)算密集型應(yīng)用,為了能在多處理器系統(tǒng)上運(yùn)行,將計(jì)算分解到多個(gè)線程中實(shí)現(xiàn)。
7、I/O密集型應(yīng)用,為了提高性能,將I/O操作重疊。線程可以同事等待不同的I/O操作。
線程的缺點(diǎn):
1、性能損失
一個(gè)很少被外部事件阻塞的計(jì)算密集型線程往往無法與共它線程共享同一個(gè)處理器。如果計(jì)算密集型線程的數(shù)量比可用的處理器多,那么可能會(huì)有較大的性能損失,這里的性能損失指的是增加了額外的同步和調(diào)度開銷,而可用的資源不變。
2、健壯性降低
編寫多線程需要更全面更深入的考慮,在一個(gè)多線程程序里,因時(shí)間分配上的細(xì)微偏差或者因共享不該共享的變量而造成不良影響的可能性是很大的,換句話說線程之間是缺乏保護(hù)的。
3、缺乏訪問控制
進(jìn)程是訪問控制的基本粒度,在一個(gè)線程中調(diào)用某些OS函數(shù)會(huì)對整個(gè)進(jìn)程造成影響。
4、編程難度提高
編寫與調(diào)試一個(gè)多線程程序比單線程程序困難的多。
說了一些線程的基本概念后,現(xiàn)在我們來說一說線程控制,線程的創(chuàng)建、等待、終止、線程的結(jié)合與分離屬性。
1、進(jìn)程的創(chuàng)建
參數(shù)
thread:返回線程ID
attr:設(shè)置線程的屬性,attr為NULL表示使用默認(rèn)屬性。
start_rountine:是個(gè)函數(shù)地址,線程啟動(dòng)后要執(zhí)行的函數(shù)。
arg:傳給線程啟動(dòng)函數(shù)的參數(shù)
返回值:成功返回0,失敗返回錯(cuò)誤碼。
2、線程等待
為什么需要線程等待?
已經(jīng)退出的線程,其空間沒有被釋放,仍然在進(jìn)程的地址空間內(nèi)。
創(chuàng)建新的線程不會(huì)復(fù)用剛才退出線程的地址空間。
等待函數(shù)
參數(shù)
thread:線程ID
value_ptr:它指向一個(gè)指針,后者指向線程的返回值
返回值:成功返回0;失敗返回錯(cuò)誤碼。
3、分離線程
默認(rèn)情況下,新創(chuàng)建的線程是joinable的,線程退出后,需要對其進(jìn)行pthread_join操作,否則無法釋放資源,從而造成系統(tǒng)泄露。
如果不關(guān)心線程的返回值,join是一種負(fù)擔(dān),這個(gè)時(shí)候,我們可以告訴系統(tǒng),當(dāng)線程退出時(shí),自動(dòng)釋放線程資源。
分離函數(shù)
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號新時(shí)空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號