中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

提供定制型網(wǎng)站建設(shè)新聞?lì)^條最新消息今天

提供定制型網(wǎng)站建設(shè),新聞?lì)^條最新消息今天,南充營(yíng)銷型網(wǎng)站建設(shè),如何做登陸界面的網(wǎng)站【圖書推薦】《Linux C與C一線開發(fā)實(shí)踐(第2版)》_linux c與c一線開發(fā)實(shí)踐pdf-CSDN博客《Linux C與C一線開發(fā)實(shí)踐(第2版)(Linux技術(shù)叢書)》(朱文偉,李建英)【摘要 書評(píng) 試讀】- 京東圖書 (jd.com…
【圖書推薦】《Linux C與C++一線開發(fā)實(shí)踐(第2版)》_linux c與c++一線開發(fā)實(shí)踐pdf-CSDN博客
《Linux C與C++一線開發(fā)實(shí)踐(第2版)(Linux技術(shù)叢書)》(朱文偉,李建英)【摘要 書評(píng) 試讀】- 京東圖書 (jd.com)

8.2.1? 操作系統(tǒng)和多線程

要在應(yīng)用程序中實(shí)現(xiàn)多線程,必須有操作系統(tǒng)的支持。Linux 32位或64位操作系統(tǒng)對(duì)應(yīng)用程序提供了多線程的支持,所以Windows NT/2000/XP/7/8/10是多線程操作系統(tǒng)。根據(jù)進(jìn)程與線程的支持情況,可以把操作系統(tǒng)大致分為如下幾類:

(1)單進(jìn)程、單線程,MS-DOS大致是這種操作系統(tǒng)。

(2)多進(jìn)程、單線程,多數(shù)UNIX(及類UNIX的Linux)是這種操作系統(tǒng)。

(3)多進(jìn)程、多線程,Win32(Windows NT/2000/XP/7/8/10等)、Solaris 2.x和OS/2都是這種操作系統(tǒng)。

(4)單進(jìn)程、多線程,VxWorks是這種操作系統(tǒng)。

具體到Linux C++的開發(fā)環(huán)境,它提供了一套POSIX API函數(shù)來管理線程,用戶既可以直接使用這些POSIX API函數(shù),也可以使用C++自帶的線程類。作為一名Linux C++開發(fā)者,這兩者都應(yīng)該會(huì)使用,因?yàn)樵贚inux C++程序中,這兩種方式都有可能出現(xiàn)。

8.2.2? 線程的基本概念

現(xiàn)代操作系統(tǒng)大多支持多線程概念,每個(gè)進(jìn)程中至少有一個(gè)線程,所以即使沒有使用多線程編程技術(shù),進(jìn)程也含有一個(gè)主線程,所以也可以說,CPU中執(zhí)行的是線程,線程是程序的最小執(zhí)行單位,是操作系統(tǒng)分配CPU時(shí)間的最小實(shí)體。一個(gè)進(jìn)程的執(zhí)行說到底是從主線程開始的,如果需要,可以在程序任何地方開辟新的線程,其他線程都是由主線程創(chuàng)建的。一個(gè)進(jìn)程正在運(yùn)行,也可以說是一個(gè)進(jìn)程中的某個(gè)線程正在運(yùn)行。一個(gè)進(jìn)程的所有線程共享該進(jìn)程的公共資源,比如虛擬地址空間、全局變量等。每個(gè)線程也可以擁有自己私有的資源,如堆棧、在堆棧中定義的靜態(tài)變量和動(dòng)態(tài)變量、CPU寄存器的狀態(tài)等。

線程總是在某個(gè)進(jìn)程環(huán)境中創(chuàng)建的,并且會(huì)在這個(gè)進(jìn)程內(nèi)部銷毀。線程和進(jìn)程的關(guān)系是:線程是屬于進(jìn)程的,線程運(yùn)行在進(jìn)程空間內(nèi),同一進(jìn)程所產(chǎn)生的線程共享同一內(nèi)存空間,當(dāng)進(jìn)程退出時(shí),該進(jìn)程所產(chǎn)生的線程都會(huì)被強(qiáng)制退出并清除。線程可與屬于同一進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源,但是其本身基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的信息(如程序計(jì)數(shù)器、一組寄存器和線程棧,線程棧用于維護(hù)線程在執(zhí)行代碼時(shí)需要的所有函數(shù)參數(shù)和局部變量)。

相對(duì)于進(jìn)程來說,線程所占用的資源更少。比如創(chuàng)建進(jìn)程,系統(tǒng)要為它分配很大的私有空間,占用的資源較多;而對(duì)于多線程程序來說,由于多個(gè)線程共享一個(gè)進(jìn)程地址空間,因此占用的資源較少。此外,進(jìn)程間切換時(shí),需要交換整個(gè)地址空間,而線程間切換時(shí),只是切換線程的上下文環(huán)境,因此效率更高。在操作系統(tǒng)中引入線程帶來的主要好處是:

(1)在進(jìn)程內(nèi)創(chuàng)建、終止線程比創(chuàng)建、終止進(jìn)程要快。

(2)同一進(jìn)程內(nèi)線程間的切換比進(jìn)程間的切換要快,尤其是用戶級(jí)線程間的切換。

(3)每個(gè)進(jìn)程具有獨(dú)立的地址空間,而該進(jìn)程內(nèi)的所有線程共享該地址空間,因此線程的出現(xiàn)可以解決父子進(jìn)程模型中子進(jìn)程必須復(fù)制父進(jìn)程地址空間的問題。

(4)線程對(duì)解決客戶/服務(wù)器模型非常有效。

雖然多線程給應(yīng)用開發(fā)帶來了不少好處,但并不是所有情況下都要去使用多線程,要具體問題具體分析。通常在下列情況下可以考慮使用多線程:

(1)應(yīng)用程序中的各任務(wù)相對(duì)獨(dú)立。

(2)某些任務(wù)耗時(shí)較多。

(3)各任務(wù)有不同的優(yōu)先級(jí)。

(4)一些實(shí)時(shí)系統(tǒng)應(yīng)用。

值得注意的是,一個(gè)進(jìn)程中的所有線程共享它們父進(jìn)程的變量,但同時(shí)每個(gè)線程可以擁有自己的變量。

8.2.3? 線程的狀態(tài)

一個(gè)線程在從創(chuàng)建到結(jié)束這一生命周期中,總是處于下面4個(gè)狀態(tài)中的一個(gè)。

1)就緒態(tài)

線程能夠運(yùn)行的條件已經(jīng)滿足,只是在等待處理器(處理器要根據(jù)調(diào)度策略來把就緒態(tài)的線程調(diào)度到處理器中運(yùn)行)。處于就緒態(tài)的原因可能是線程剛剛被創(chuàng)建(剛創(chuàng)建的線程不一定馬上運(yùn)行,一般先處于就緒態(tài)),也可能是剛剛從阻塞狀態(tài)中恢復(fù),還可能是因被其他線程搶占而處于就緒態(tài)。

2)運(yùn)行態(tài)

運(yùn)行態(tài)表示線程正在處理器中運(yùn)行,正占用著處理器。

3)阻塞態(tài)

由于在等待處理器之外的其他條件而無法運(yùn)行的狀態(tài)叫作阻塞態(tài)。這里的其他條件包括I/O操作、互斥鎖的釋放、條件變量的改變等。

4)終止態(tài)

終止態(tài)就是線程的線程函數(shù)運(yùn)行結(jié)束或被其他線程取消后處于的狀態(tài)。處于終止態(tài)的線程雖然已經(jīng)結(jié)束了,但它所占資源還沒有被回收,而且還可以被重新復(fù)活。我們不應(yīng)該長(zhǎng)時(shí)間讓線程處于這種狀態(tài),線程處于終止態(tài)后應(yīng)該及時(shí)進(jìn)行資源回收,下面會(huì)講到如何回收。

8.2.4? 線程函數(shù)

線程函數(shù)就是線程創(chuàng)建后進(jìn)入運(yùn)行態(tài)后要執(zhí)行的函數(shù)。執(zhí)行線程說到底就是執(zhí)行線程函數(shù)。這個(gè)函數(shù)是我們自定義的,然后在創(chuàng)建線程時(shí)把我們的函數(shù)作為參數(shù)傳入線程創(chuàng)建函數(shù)。

同理,中斷線程的執(zhí)行就是中斷線程函數(shù)的執(zhí)行,以后再恢復(fù)線程的時(shí)候,就會(huì)在前面線程函數(shù)暫停的地方繼續(xù)執(zhí)行下面的代碼。結(jié)束線程也就不再運(yùn)行線程函數(shù)。線程的函數(shù)可以是一個(gè)全局函數(shù)或類的靜態(tài)函數(shù),比如在POSIX線程庫中,它通常這樣聲明:

void *ThreadProc (void *arg)

其中,參數(shù)arg指向要傳給線程的數(shù)據(jù),這個(gè)參數(shù)是在創(chuàng)建線程的時(shí)候作為參數(shù)傳入線程創(chuàng)建函數(shù)中的。函數(shù)的返回值應(yīng)該表示線程函數(shù)運(yùn)行的結(jié)果:成功還是失敗。注意函數(shù)名ThreadProc可以是自定義的函數(shù)名,這個(gè)函數(shù)是用戶自己先定義好,然后由系統(tǒng)來調(diào)用。

8.2.5? 線程標(biāo)識(shí)

既然句柄是用來標(biāo)識(shí)線程對(duì)象的,那線程本身用什么來標(biāo)識(shí)呢?在創(chuàng)建線程的時(shí)候,系統(tǒng)會(huì)為線程分配唯一的ID作為線程的標(biāo)識(shí),這個(gè)ID從線程創(chuàng)建開始就存在,一直伴隨著線程的結(jié)束才消失。線程結(jié)束后,該ID就自動(dòng)不存在,我們不需要去顯式清除它。

通常線程創(chuàng)建成功后會(huì)返回一個(gè)線程ID。

8.2.6? C++多線程開發(fā)的兩種方式

在Linux C++開發(fā)環(huán)境中,通常有兩種方式來開發(fā)多線程程序:一種是利用POSIX多線程API函數(shù)來開發(fā)多線程程序,另一種是利用C++自帶線程類來開發(fā)多線程程序。這兩種方式各有利弊。前一種方法比較傳統(tǒng),后一種方法比較新,是C++11推出的方法。為何C++程序員也要熟悉POSIX多線程開發(fā)呢?這是因?yàn)镃++11以前,在C++里面使用多線程一般都是利用POSIX多線程API,或者把POSIX多線程API封裝成類,再在公司內(nèi)部供大家使用。因此,一些老項(xiàng)目都是和POSIX多線程庫相關(guān)的,這也使得我們必須熟悉它,因?yàn)楹芸赡苓M(jìn)入公司后會(huì)要求維護(hù)以前的程序代碼。而C++自帶線程類很可能在以后開發(fā)新的項(xiàng)目時(shí)會(huì)用到??傊?#xff0c;技多不壓身。

http://www.risenshineclean.com/news/56687.html

相關(guān)文章:

  • wordpress mysqlli平臺(tái)關(guān)鍵詞排名優(yōu)化
  • 全國(guó)網(wǎng)站建設(shè)公司排名網(wǎng)上銷售培訓(xùn)課程
  • 男女插孔做暖暖網(wǎng)站大全免費(fèi)淘寶關(guān)鍵詞工具
  • 杭州軟件定制開發(fā)seo搜索排名優(yōu)化是什么意思
  • 企業(yè)網(wǎng)站建設(shè)案例百度網(wǎng)址怎么輸入?
  • 重慶政府招標(biāo)網(wǎng)北京關(guān)鍵詞seo
  • 免費(fèi)做自己的網(wǎng)站有錢賺嗎搜狗seo查詢
  • 上海專業(yè)網(wǎng)站建設(shè)哪家好自己怎么建網(wǎng)站
  • 為什么局域網(wǎng)做網(wǎng)站優(yōu)化的近義詞
  • 奢侈品 網(wǎng)站建設(shè)方案網(wǎng)絡(luò)推廣費(fèi)用一般多少
  • 網(wǎng)站建設(shè)公司的服務(wù)定位app推廣多少錢一單
  • php視頻網(wǎng)站怎么做百度導(dǎo)航
  • 商城網(wǎng)站驗(yàn)收標(biāo)準(zhǔn)競(jìng)價(jià)推廣營(yíng)銷
  • 國(guó)內(nèi)網(wǎng)頁加速器手機(jī)關(guān)鍵詞排名優(yōu)化
  • wordpress 上傳類南寧seo手段
  • jsp網(wǎng)站開發(fā)教學(xué)視頻深圳網(wǎng)絡(luò)優(yōu)化seo
  • 做網(wǎng)站的云服務(wù)器選什么百度引流平臺(tái)
  • 建設(shè)實(shí)業(yè)公司網(wǎng)站設(shè)計(jì)模板互聯(lián)網(wǎng)推廣項(xiàng)目
  • 做網(wǎng)站運(yùn)營(yíng)怎么樣今天最新的新聞?lì)^條新聞
  • 濟(jì)南做網(wǎng)站公司有哪些現(xiàn)在做網(wǎng)絡(luò)推廣好做嗎
  • 東莞做閥門的網(wǎng)站太原seo關(guān)鍵詞排名
  • 中山市建設(shè)局網(wǎng)站窗口電話網(wǎng)絡(luò)營(yíng)銷的特點(diǎn)有哪些
  • 網(wǎng)站備案 接入商名稱安徽seo報(bào)價(jià)
  • 做網(wǎng)站有限公司經(jīng)典軟文文案
  • 網(wǎng)絡(luò)設(shè)計(jì)畢業(yè)論文seo排名優(yōu)化關(guān)鍵詞
  • 塘沽建設(shè)網(wǎng)站北京網(wǎng)站開發(fā)
  • 武漢正規(guī)的做網(wǎng)站公司百度app平臺(tái)
  • 網(wǎng)站建設(shè)旗幟條幅app推廣30元一單
  • 人民日?qǐng)?bào)網(wǎng)站誰做的抖音seo排名系統(tǒng)哪個(gè)好用
  • angular2是做網(wǎng)站的還是手機(jī)的百度風(fēng)云榜小說排行榜歷屆榜單