Linux——線程概念及私有數(shù)據(jù)和優(yōu)缺點-創(chuàng)新互聯(lián)

目錄

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),襄城企業(yè)網(wǎng)站建設(shè),襄城品牌網(wǎng)站建設(shè),網(wǎng)站定制,襄城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,襄城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

一.什么是線程

二.線程私有的數(shù)據(jù)

三.線程的優(yōu)點

四.線程的缺點

五.線程與進(jìn)程對比


一.什么是線程

線程是在進(jìn)程內(nèi)部運(yùn)行,一個進(jìn)程可以有多個線程。

打個比方,假如人是一個進(jìn)程,那么走路、思考、吃飯、說話作為不同的線程。一個進(jìn)程能有多個線程同時運(yùn)行,就好比一個人在走路時還可以思考、說話、吃飯一樣。

可以說,線程就是進(jìn)程的“四肢”,是進(jìn)程運(yùn)行的基本單位,是CPU調(diào)度的基本單位。

畫個草圖如下:

總結(jié)而言,在一個程序里的一個執(zhí)行路線就叫做線程,且一個進(jìn)程至少要有一個執(zhí)行線程。

線程與進(jìn)程共享虛擬地址空間、頁表等內(nèi)核數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)和代碼。
線程的數(shù)據(jù)結(jié)構(gòu)理論上與進(jìn)程的不同,但基于線程和進(jìn)程的相似性,linux的線程數(shù)據(jù)結(jié)構(gòu)依舊采用
task_struct結(jié)構(gòu)體,與進(jìn)程的一致。但是其他的操作系統(tǒng)線程有專屬的結(jié)構(gòu),與進(jìn)程的不同。也就是說,linux沒有真正意義上的線程結(jié)構(gòu),而是采用進(jìn)程的task_struct結(jié)構(gòu)體模擬的線程。

即便線程與進(jìn)程都采用task_struct結(jié)構(gòu)體,但是內(nèi)核數(shù)據(jù)結(jié)構(gòu)依舊屬于進(jìn)程,線程只是與進(jìn)程共享。
換句話說,進(jìn)程 = 多個線程(執(zhí)行流)+ 內(nèi)核數(shù)據(jù)結(jié)構(gòu) + 數(shù)據(jù) + 代碼。
而task_struct本質(zhì)就是進(jìn)程內(nèi)部的一個執(zhí)行流。
對于CPU而言,本質(zhì)上只是調(diào)度task_struct,而不會區(qū)分進(jìn)程還是線程。

圖示如下:

二.線程私有數(shù)據(jù)及區(qū)域

所有線程共享進(jìn)程的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)及代碼,但是每個線程也有自己私有的數(shù)據(jù)。

比如線程id、寄存器和棧,還有errno、信號屏蔽字(block位圖)、調(diào)度優(yōu)先級。

linux的線程數(shù)據(jù)創(chuàng)建在共享區(qū)中,因此,線程結(jié)構(gòu)在共享區(qū)中。

linux使用pthread庫來創(chuàng)建及管理線程,而pthread作為動態(tài)庫需要加載到共享區(qū),進(jìn)而線程創(chuàng)建在共享區(qū)中。

線程棧、局部存儲數(shù)據(jù)(__pthread類型變量)及線程id由pthread庫函數(shù)創(chuàng)建的struct pthread結(jié)構(gòu)體管理。該結(jié)構(gòu)體在共享區(qū),因此,線程的棧也在共享區(qū)中。

值得注意的是:

①主線程使用虛擬地址空間中的棧區(qū),只有其他線程使用共享區(qū)中分配的棧區(qū)。

②線程id(pthread_self()函數(shù)返回值)本質(zhì)是共享區(qū)pthread庫所分配給該線程空間的起始地址,即id本質(zhì)是一個地址。

圖示如下:

三.線程的優(yōu)點

①創(chuàng)建線程的代價比創(chuàng)建進(jìn)程小。創(chuàng)建線程只用創(chuàng)建task_struct結(jié)構(gòu)體,而進(jìn)程還有相關(guān)內(nèi)核數(shù)據(jù)結(jié)構(gòu),加載數(shù)據(jù)和代碼。

②線程切換效率比進(jìn)程切換高。線程占用系統(tǒng)資源少,切換更高效。線程切換時不會清除緩存數(shù)據(jù),進(jìn)程切換會清除緩存。

③線程可以充分利用CPU多核心的優(yōu)勢(多線程)。可以同時執(zhí)行不同的任務(wù),使得多個任務(wù)能夠并發(fā)進(jìn)行。

④多線程可以提高計算密集型和IO密集型應(yīng)用的效率。計算密集型應(yīng)用可以將計算分給多個線程處理,IO密集型應(yīng)用可以使用多線程同時進(jìn)行不同的IO操作。

四.線程的缺點

①多線程的健壯性差。多線程之間沒有數(shù)據(jù)保護(hù),可能存在因為線程執(zhí)行順序問題導(dǎo)致的數(shù)據(jù)錯誤。

②缺乏訪問控制。線程訪問某些系統(tǒng)函數(shù)可能會對整個進(jìn)程造成影響。

③多線程程序調(diào)試難度大。多線程代碼的調(diào)試比單線程困難許多。

五.線程與進(jìn)程對比

①一個進(jìn)程可以有多個線程,且只少有一個線程。

②進(jìn)程擁有內(nèi)核數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)及代碼,線程只有使用權(quán)和必不可少的私有數(shù)據(jù)如寄存器和棧。

③線程執(zhí)行效率通常更高,但不安全。

④一個線程異常,整個進(jìn)程異常。


如有錯誤,敬請斧正

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站名稱:Linux——線程概念及私有數(shù)據(jù)和優(yōu)缺點-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article46/dcjseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站排名、ChatGPT、動態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)