亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        隱式多線程綜述

        2020-01-02 23:31:02李劭卓
        數(shù)字通信世界 2020年3期
        關(guān)鍵詞:編譯器線程隊(duì)列

        李劭卓

        (河北農(nóng)業(yè)大學(xué)渤海校區(qū),黃驊 061000)

        0 引言

        在計(jì)算機(jī)發(fā)展史上,計(jì)算機(jī)從單線程發(fā)展到了多線程,多線程的出現(xiàn)很大程度上提升了計(jì)算機(jī)的性能,但是在人類科技發(fā)展的需求以及摩爾定理的限制下,單核處理機(jī)系統(tǒng)已經(jīng)到達(dá)極限。為了響應(yīng)更多計(jì)算機(jī)性能方面的需求,適應(yīng)計(jì)算機(jī)發(fā)展的需要,計(jì)算機(jī)已開始從單處理器系統(tǒng)向多處理器系統(tǒng)發(fā)展。

        在多核處理機(jī)系統(tǒng)的快速發(fā)展中,多核系統(tǒng)編程(任務(wù)識(shí)別、平衡、數(shù)據(jù)分割、數(shù)據(jù)依賴、測試與調(diào)試)和程序正確性(同步與死鎖)的兩個(gè)方面難題越發(fā)突出。為了解決這些難題并設(shè)計(jì)出更好的多線程程序,人們開始通過編譯器與運(yùn)行時(shí)庫來創(chuàng)建和管理多線程,即隱式線程(implicit threading),基于隱式線程與多線程的主要設(shè)計(jì)方法有三種:線程池(Thread pool)、OpenMP、大中央調(diào)度(Grand Central Dispatch,GCD)。

        1 隱式多線程的實(shí)現(xiàn)方法

        1.1 線程池

        當(dāng)多線程服務(wù)器接收到一個(gè)請求時(shí),如果采用創(chuàng)建一個(gè)新的線程去處理請求會(huì)出現(xiàn)兩種問題。第一種:創(chuàng)建新的線程需要時(shí)間并且在處理后會(huì)被丟失,第二種:沒有限制系統(tǒng)內(nèi)部并發(fā)執(zhí)行線程的數(shù)量。這兩個(gè)問題會(huì)導(dǎo)致系統(tǒng)響應(yīng)速度以及性能的降低。

        而線程池的出現(xiàn)為線程的創(chuàng)建、銷毀以及資源不足的問題提供了解決方案。在進(jìn)程開始的時(shí)候,系統(tǒng)就創(chuàng)建一定數(shù)量的線程,并將這些線程加入池中等待喚醒,當(dāng)服務(wù)器收到請求時(shí),服務(wù)器就喚醒一個(gè)可用的線程,然后將需要服務(wù)的請求傳遞給該線程,待線程完成服務(wù)之后,再重新返回到線程池中等待下一次喚醒,若沒有可用的線程,則服務(wù)器就會(huì)開始等待,直到有空線程為止。

        優(yōu)點(diǎn):

        (1)提高了系統(tǒng)的響應(yīng)速度。系統(tǒng)已經(jīng)創(chuàng)建好了一定數(shù)量的線程,當(dāng)有請求到來時(shí),可直接使用預(yù)先建立好的線程,不需要重新創(chuàng)建線程,這消除了系統(tǒng)創(chuàng)建線程時(shí)的時(shí)間延遲。

        (2)線程池限制了任何時(shí)刻的可用線程的數(shù)量。系統(tǒng)預(yù)先創(chuàng)建一定數(shù)量的線程,并且限制它們的數(shù)量,這能夠控制線程對象在內(nèi)存中的消耗。十分有利于有大量并發(fā)式訪問,而其任務(wù)短小的服務(wù)器。

        (3)將待執(zhí)行任務(wù)從創(chuàng)建任務(wù)的機(jī)制中分離出來。允許使用延遲或定期執(zhí)行的策略運(yùn)行任務(wù)。

        (4)降低系統(tǒng)的開銷與資源的消耗。線程池中的線程被重復(fù)利用,使用后的線程會(huì)重新返回到線程池中,不會(huì)被銷毀,降低了虛擬機(jī)垃圾回收方面的開銷。

        缺點(diǎn):

        (1)需要考慮線程池的大小。線程池中的線程并非越多越好,需要結(jié)合軟硬件的具體環(huán)境以及應(yīng)用程序自身的特點(diǎn)來考慮。

        (2)線程泄露。當(dāng)線程執(zhí)行完任務(wù)后,沒有返回到線程池中。需要采取異常捕捉的方法防止線程泄露。

        (3)并發(fā)錯(cuò)誤。要從邏輯上考慮線程的并發(fā)狀況,防止死鎖的出現(xiàn)。

        1.2 OpenMP

        OpenMP是一種支持共享內(nèi)存環(huán)境的多處理器多線程并行編譯語言,它由一組編譯指令和API組成,其通過向C、C++、Fortran語言提供一組和平臺(tái)無關(guān)的編譯指令、函數(shù)調(diào)用、指導(dǎo)函數(shù)以及環(huán)境變量,來指示OpenMP運(yùn)行時(shí)庫在何時(shí)何處才能進(jìn)行并行處理。

        并行處理的指示指令為#pragma omp parallel,當(dāng)程序進(jìn)行到指示指令時(shí),系統(tǒng)就會(huì)創(chuàng)建一個(gè)與系統(tǒng)處理器數(shù)量一樣多的線程。原線程(主線程)與新派生出來的線程(組的從屬線程)組成線程組,即從單個(gè)線程執(zhí)行轉(zhuǎn)換為多線程并行執(zhí)行,待程序執(zhí)行完并行區(qū)域(parallel fegion)的所有內(nèi)容后,系統(tǒng)將會(huì)把并行線程的所得結(jié)果連接在一起,并重新開始單個(gè)線程執(zhí)行,此通常用于循環(huán)結(jié)構(gòu)的并行化處理。

        除提供并行化指令外,OpenMP還允許手動(dòng)設(shè)置線程數(shù)量、指定哪個(gè)數(shù)據(jù)可在線程間共享、哪個(gè)數(shù)據(jù)只屬于某個(gè)線程,其支持的操作系統(tǒng)有Windows、Linux、Mac OS X,并可用于多種開源編譯器和商用編譯器。

        優(yōu)點(diǎn):

        (1)有利于多核升級(jí)后的程序性能。多核編程需要考慮到今后硬件核數(shù)升級(jí)之后的程序性能問題,如果將程序設(shè)計(jì)為隨CPU核數(shù)增長,就無法固定線程的數(shù)量;如果固定線程數(shù)量并且要求CPU核數(shù)增加時(shí),程序性能也要增加,則需要在每次硬件核數(shù)升級(jí)后,程序進(jìn)行相對應(yīng)的更改。OpenMP可直接根據(jù)CPU的核數(shù)創(chuàng)建線程,這十分方便。

        (2)并行區(qū)域執(zhí)行方便。多核編程中,需要將并行部分均分到各個(gè)CPU核心中,這對計(jì)算的負(fù)載均衡要求很高,但OpenMP可直接將并行區(qū)域的代碼分解為多個(gè)線程執(zhí)行。

        (3)方便移植。OpenMP是標(biāo)準(zhǔn)規(guī)范,所有支持OpenMP的編譯器執(zhí)行標(biāo)準(zhǔn)一致。

        缺點(diǎn):

        (1)使用范圍有限。OpenMP是一種支持共享內(nèi)存環(huán)境的多處理器多線程并行編譯語言,在非共享內(nèi)存系統(tǒng)中無法使用。

        (2)高層抽象的局限性。OpenMP在需要復(fù)雜線程同步與互斥場合中不適用。

        1.3 大中央調(diào)度

        大中央調(diào)度是Apple Mac OS X和iOS的一種技術(shù),它能為C語言、API和運(yùn)行時(shí)庫提供一組擴(kuò)展,允許多個(gè)代碼區(qū)域并行運(yùn)行。

        GCD在C與C++中增加了塊(block)的擴(kuò)展,用字符加{ }的形式將塊括起來,同時(shí)以一個(gè)塊為獨(dú)立單位,然后將各個(gè)塊放入調(diào)度隊(duì)列(dispatchqueue)中,在執(zhí)行程序時(shí)

        ,每次從調(diào)度隊(duì)列中取出一個(gè)塊,并將它分配給線程池中的一個(gè)可用線程。

        調(diào)度隊(duì)列有兩種形式:串行(serial)和并行(concurrent)。

        串行:

        串行隊(duì)列以先進(jìn)先出的形式進(jìn)行塊的執(zhí)行,每次只能執(zhí)行一個(gè)塊,每當(dāng)一個(gè)塊執(zhí)行完后,才會(huì)從調(diào)度隊(duì)列中調(diào)度下一個(gè)塊。在進(jìn)程中可以有多個(gè)串行隊(duì)列,但是只能有一個(gè)主隊(duì)列,其用于保證任務(wù)的順序的正確性。

        并行:

        并發(fā)隊(duì)列也以先進(jìn)先出的進(jìn)行塊的執(zhí)行,但是每次可以執(zhí)行多個(gè)塊,進(jìn)行多個(gè)塊的并行運(yùn)行。

        在大中央調(diào)度中的線程池由POSIX線程組成,GCD會(huì)根據(jù)應(yīng)用需求以及系統(tǒng)的容量動(dòng)態(tài)地調(diào)節(jié)線程的數(shù)量,以此實(shí)現(xiàn)對內(nèi)部線程池的管理。

        優(yōu)點(diǎn):

        (1)GCD更加接近底層。GCD提供底層函數(shù),在追求性能的底層操作中,速度很快,并提供更強(qiáng)大的控制力。

        (2)系統(tǒng)資源利用率高??梢院唵蔚卦诓煌a中傳遞上下文,減少上下文之間的切換,提高資源的利用率,減輕系統(tǒng)的負(fù)荷。

        缺點(diǎn):

        操作實(shí)現(xiàn)復(fù)雜。GCD需要許多代碼來實(shí)現(xiàn)異步操作之間的事務(wù)性、順序行和依賴關(guān)系。

        1.4 其他方法

        線程構(gòu)造模塊(Treading Building Block,TBB):

        一種由Intel開發(fā)用于并行編程的C++線程庫,它不需要線程編程,允許運(yùn)行時(shí)庫自動(dòng)地將邏輯并行映射到線程中,有效地利用了CPU資源,而且可以與其他線程兼容,實(shí)現(xiàn)無縫共存。

        Java.util.concurrent:

        一種Java語言用于并行編程的實(shí)用工具類,它包括了幾個(gè)已經(jīng)標(biāo)準(zhǔn)化的可擴(kuò)展框架和一些提供有用功能的類。

        2 結(jié)束語

        多核多線程已成為處理器發(fā)展的一個(gè)大方向,它能提升計(jì)算機(jī)的性能,但面臨著多核系統(tǒng)編程和程序正確性上的兩個(gè)方面難題,隱式多線程可以有效地解決與緩解這兩方面問題。

        雖然隱式多線程實(shí)現(xiàn)技術(shù)很多,但其核心思想是控制系統(tǒng)中線程的數(shù)量,利用已有線程執(zhí)行任務(wù)、創(chuàng)建線程數(shù)量要與計(jì)算機(jī)處理核心相匹配以及動(dòng)態(tài)地調(diào)用線程數(shù)量。

        猜你喜歡
        編譯器線程隊(duì)列
        隊(duì)列里的小秘密
        基于多隊(duì)列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
        在隊(duì)列里
        豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
        淺談linux多線程協(xié)作
        通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
        Linux線程實(shí)現(xiàn)技術(shù)研究
        編譯器無關(guān)性編碼在微控制器中的優(yōu)勢
        么移動(dòng)中間件線程池并發(fā)機(jī)制優(yōu)化改進(jìn)
        欧美丰满大爆乳波霸奶水多| av天堂精品久久综合网| 777精品出轨人妻国产| 丁香五香天堂网| 91国在线啪精品一区| 三级日本午夜在线观看| 中文字幕av久久亚洲精品| 久久精品噜噜噜成人| 亚洲毛片网| 亚洲av色香蕉第一区二区三区| 国产农村妇女精品一区| 曰韩人妻无码一区二区三区综合部| 国产亚洲精品看片在线观看| 亚洲av日韩一区二三四五六七| 加勒比东京热中文字幕| 日韩毛片免费无码无毒视频观看| 综合网在线视频| 一区二区黄色素人黄色| 亚洲综合图色40p| www国产无套内射com| 亚洲av高清在线观看三区| 亚洲人妻御姐中文字幕| 日本一区二区三区爆乳| 久久棈精品久久久久久噜噜| 久久aⅴ无码av高潮AV喷| 人妻少妇精品视频专区二区三区| 四虎影视成人永久免费观看视频 | 国产乱子伦精品免费无码专区| 国产精品国产三级国产AvkTV| 一区二区二区三区亚洲| 亚洲精品夜夜夜妓女网| 免费成人福利视频| av成人资源在线观看| 99久久精品免费看国产一区二区三区| 亚州少妇无套内射激情视频 | 青青草好吊色在线视频| 精品国产一区二区三区2021| 青青青国产精品一区二区| 久久av一区二区三区下| 激情精品一区二区三区| 国产成人无码区免费内射一片色欲 |