欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

總線和共享內(nèi)存的區(qū)別

Linux愛好者 ? 來源:Linux愛好者 ? 作者:Linux愛好者 ? 2022-10-10 14:55 ? 次閱讀

題目是一句golang編程箴言,對(duì)它的理解可大可小。

1508e322-485a-11ed-a3b6-dac502259ad0.png

往小了說,golang建議使用channel來共享信息而不是使用共享內(nèi)存,這是一種優(yōu)雅的方式,避免了數(shù)據(jù)同步帶來的繁瑣和低效。

往大了說,本質(zhì)上還是讓資源去調(diào)度請(qǐng)求,而不是讓請(qǐng)求去調(diào)度資源。

有些時(shí)候,思維的轉(zhuǎn)變,問題的視角,會(huì)帶來意想不到的收獲

資源就那么多,所有請(qǐng)求有序使用資源的方式就是通信的方式,反過來,為每個(gè)請(qǐng)求虛擬出它獨(dú)占資源的假象,那就是共享的方式。兩種截然不同的方式,差異體現(xiàn)在仲裁成本,這個(gè)成本決定了它們承載并發(fā)的能力。

一個(gè)一個(gè)說。

電路交換 vs 分組交換

151775c2-485a-11ed-a3b6-dac502259ad0.png

電路交換試圖占有整條電路(其實(shí)是最后一公里),若不成功,必須等到成功。

分組交換將長(zhǎng)信息分割成若干小數(shù)據(jù)包,小數(shù)據(jù)包統(tǒng)計(jì)復(fù)用鏈路。

批處理系統(tǒng) vs 分時(shí)系統(tǒng)

批處理用戶一旦使用系統(tǒng),則會(huì)獨(dú)占系統(tǒng)到任務(wù)完成,其它用戶等待。

分時(shí)系統(tǒng)將時(shí)間分片,多用戶被調(diào)度復(fù)用時(shí)間片。

CSMA/CD vs 交換式以太網(wǎng)

CSMA/CD主機(jī)試圖獨(dú)占總線發(fā)送數(shù)據(jù)包,若不成功便退避直到成功。

交換式以太網(wǎng)數(shù)據(jù)包在交換機(jī)有序排隊(duì),復(fù)用buffer。

Apache vs Nginx

Apache為每一個(gè)請(qǐng)求生成一個(gè)task,該task一旦獲得CPU,其它task將等待。

Nginx采用異步模型,所有請(qǐng)求分時(shí)復(fù)用固定數(shù)量task的CPU時(shí)間。

共享內(nèi)存 vs erlang/go channel

共享內(nèi)存對(duì)寫寫以及讀寫是互斥,每次只允許一個(gè)操作,其它不得不等待,重試。

erlang/go channel將內(nèi)容拆解為事務(wù)消息,依靠消息的有序傳遞共享信息。

...

我們來看上述兩兩比較的共性。

可將上述所有的二者抽象為爭(zhēng)搶模式和有序模式:

對(duì)于爭(zhēng)搶模式,本質(zhì)上需要對(duì)沖突進(jìn)行仲裁。

對(duì)于有序模式,本質(zhì)上需要對(duì)并發(fā)進(jìn)行調(diào)度。

所謂對(duì)沖突進(jìn)行仲裁,意思就是發(fā)生沖突后怎么辦。無論是退避重試,還是等待,此期間均是什么都做不了,且仲裁本身需要昂貴的成本。

并發(fā)調(diào)度就會(huì)好太多,有序化便無沖突,也就沒有仲裁成本了,沒有了仲裁,也就無需重試,等待,便可以干別的了,處理完全異步化。

我們?cè)賮韺?duì)比之前技術(shù)優(yōu)劣:

電路交換 vs 分組交換

電路交換一旦占線,你需要自己不斷重試。

分組交換你只管發(fā)數(shù)據(jù)包,交換節(jié)點(diǎn)會(huì)自動(dòng)調(diào)度這些數(shù)據(jù)包到達(dá)目的地后重組。

批處理系統(tǒng) vs 分時(shí)系統(tǒng)

批處理系統(tǒng)一旦系統(tǒng)被占,你就要排隊(duì)等待或者待會(huì)兒再來。

分時(shí)系統(tǒng)你只需要下發(fā)任務(wù),任務(wù)調(diào)度系統(tǒng)會(huì)讓所有用戶的任務(wù)分時(shí)復(fù)用時(shí)間片。

CSMA/CD vs 交換式以太網(wǎng)

CSMA/CD網(wǎng)卡需要不斷監(jiān)聽沖突并重試。

交換式以太網(wǎng)卡只需要發(fā)包,交換機(jī)會(huì)排隊(duì)調(diào)度來不及轉(zhuǎn)發(fā)的數(shù)據(jù)包。

Apache vs Nginx

Apache線程/進(jìn)程若沒被調(diào)度到CPU,就需要等待直到被調(diào)度切換至CPU。

Nginx只需將事件通知到,工作進(jìn)程便會(huì)輪詢處理完所有請(qǐng)求。

共享內(nèi)存 vs erlang/go channel

共享內(nèi)存訪問需要加鎖,若持鎖失敗,要么忙等重試,要么待會(huì)兒再來。

erlang/go channel以消息傳遞通信,消息發(fā)出后就不用管了,除非它希望得到回饋,完全異步。

可見,這又是一個(gè)殊途同歸。同類的還有:

PCI vs PCIe,從總線到交換。

宏內(nèi)核 vs 微內(nèi)核,從共享數(shù)據(jù)結(jié)構(gòu)到消息傳遞。

1541f784-485a-11ed-a3b6-dac502259ad0.jpg

Spin/RW Lock vs RCU Lock,從爭(zhēng)搶鎖到操作副本原子更新。

154e4eee-485a-11ed-a3b6-dac502259ad0.png

RCU原理

為什么沖突仲裁的爭(zhēng)搶模式無法承載大并發(fā),因?yàn)檫^載的沖突仲裁開銷會(huì)將資源淹沒,若要承載大并發(fā),必然要采用調(diào)度的方式。要理解這一要素,需要換一個(gè)視角。

我們看操作的是信息的本身,還是信息的副本。

回到本文題目,“以通信方式共享內(nèi)存”操作信息的副本, 而“以共享內(nèi)存方式通信”則操作信息本身。

操作信息副本可以保證同時(shí)有且只有一個(gè)實(shí)體操作該副本,如果有兩個(gè)實(shí)體需要操作該副本,那就再復(fù)制一個(gè)副本,這就保證了無沖突,業(yè)務(wù)流是可控?zé)o阻塞的。

RCU可做到業(yè)務(wù)無阻塞并發(fā),無論是spinlock還是rwlock,都做不到。spinlock/rwlock鎖臨界區(qū),造成臨界區(qū)串行化,而RCU沒臨界區(qū),它將本屬于臨界區(qū)的邏輯作為副本操作,擇機(jī)原子更新,這便可做到無阻塞并發(fā)。

操作副本是無阻塞并發(fā)的甘泉,如果把并發(fā)看作是時(shí)間擴(kuò)展性,那么將信息共享到遠(yuǎn)方則是空間擴(kuò)展性,完成這件事的是網(wǎng)絡(luò),目前它是TCP/IP網(wǎng)絡(luò)。TCP/IP網(wǎng)絡(luò)采用了“以通信方式共享內(nèi)存”的方式,它無疑是正確的。

我不懂erlang,但大致知道它的意思,erlang沒有變量,只操作副本,它是通信網(wǎng)絡(luò)在編程語言上的映射,對(duì)于golang,大概也是如此,使用go channel可以像網(wǎng)絡(luò)收發(fā)一樣來處理信息。

我們看socket接口,它實(shí)屬用通信的方式共享內(nèi)存的古老方式。

socket接口一開始是進(jìn)程間通信機(jī)制,與之通信的進(jìn)程可在本機(jī),也可在遠(yuǎn)處,可在世界任意地方?!耙酝ㄐ欧绞焦蚕韮?nèi)存“,是最原始的編程模式,一直到現(xiàn)在依然正確。

共享內(nèi)存是一種本地優(yōu)化,僅有編程意義,卻沒有擴(kuò)展性,無論是無阻塞并發(fā)的時(shí)間擴(kuò)展性,還是將信息傳遞給遠(yuǎn)方的空間擴(kuò)展性。

共享內(nèi)存是一種本地優(yōu)化,優(yōu)化的是指令操作延時(shí),與其將信息封裝成消息并傳遞,不如直接操作信息本身,它編程更簡(jiǎn)單,代碼指令更少,執(zhí)行延時(shí)更低。但高并發(fā)并不care指令延時(shí),高并發(fā)care同時(shí)執(zhí)行的有效指令數(shù),而spin,switch不屬于有效指令,故共享內(nèi)存天生不與高并發(fā)配對(duì)。

此外,還是那個(gè)觀點(diǎn),網(wǎng)絡(luò)編程場(chǎng)景,普遍毫秒級(jí)的單流通信延時(shí),共享內(nèi)存相比消息傳遞節(jié)省個(gè)微妙甚至納秒級(jí)的操作延時(shí),并無太大意義。要怪就怪光速吧。

從云原生開始

云原生是面向微服務(wù)的架構(gòu),而消息傳遞是微服務(wù)交互的媒介,每個(gè)工人都接觸過關(guān)于消息隊(duì)列的概念,正是消息支撐了云原生微服務(wù)。

消息并不封裝狀態(tài),消息本身無狀態(tài),狀態(tài)通過消息之間的交互來體現(xiàn)。消息交互可自由組合,這是分布式的源泉,而云原生本身就是面向分布式的設(shè)計(jì)。

一個(gè)部署云原生應(yīng)用的IDC機(jī)房就是縮小版的全球TCP/IP互聯(lián)網(wǎng),無狀態(tài)的消息在分布式的微服務(wù)之間傳遞,狀態(tài)僅由微服務(wù)的交互定義和維護(hù)。

甚至一臺(tái)物理主機(jī)內(nèi)部板卡也成了微型版的全球TCP/IP互聯(lián)網(wǎng),無狀態(tài)的消息在分布式的模塊之間傳遞,狀態(tài)僅由模塊之間的交互定義和維護(hù)。

共享內(nèi)存類似總線,大家擁有平等訪問權(quán),但寫訪問時(shí)要獨(dú)占。我們可以從總線和消息交換的關(guān)系看共享內(nèi)存的處境。

曾經(jīng),主機(jī)主板上很多總線,很多模塊都要先爭(zhēng)搶獲得總線控制權(quán)才能與CPU或別的模塊通信,但后來PCIe將總線改成了由Hub互聯(lián)的交換網(wǎng)絡(luò),采用消息交換替換了總線仲裁。

以太網(wǎng)在此之前已經(jīng)走過了同樣的軌跡。

近來年被工人們提倡的微內(nèi)核思想,大致也是這么回事,將對(duì)共享數(shù)據(jù)結(jié)構(gòu)的操作換成了消息傳遞。

為什么這些都和全球TCP/IP互聯(lián)網(wǎng)類比呢?因?yàn)?strong>TCP/IP的基礎(chǔ)就是異步的,無狀態(tài)的,分布式的,消息傳遞的分組交換網(wǎng)。

156b04bc-485a-11ed-a3b6-dac502259ad0.png

總線簡(jiǎn)單樸素,隨著系統(tǒng)規(guī)模的擴(kuò)大,總線爭(zhēng)搶帶來的時(shí)間損耗指數(shù)級(jí)上升,人們發(fā)現(xiàn)總線無法支持高并發(fā)及無法物理擴(kuò)展時(shí),消息傳遞便替換了總線。大規(guī)模系統(tǒng),消息操作帶來的額外延時(shí)是可以忽略不計(jì)的。

無論內(nèi)部板卡,局域網(wǎng),PCI,操作系統(tǒng)都是從局域范圍開始的,它們一開始從總線開始便不足為奇。然而互聯(lián)網(wǎng)一開始就是連接分布式廣域端的,一開始就不適合采用總線結(jié)構(gòu),這反過來說明總線在分布式場(chǎng)景的不適用。

我一向贊美TCP/IP端到端原則,正是它無狀態(tài)的IP細(xì)腰讓互聯(lián)網(wǎng)規(guī)模得以任意擴(kuò)大而不引入額外開銷,而細(xì)腰也是無狀態(tài)消息交換的核心,只在發(fā)送端和接收端之間定義和維護(hù)狀態(tài),而不是所有端一起維護(hù)共享總線或內(nèi)存的狀態(tài)。

因此,消息傳遞也遵循端到端原則,可以自由擴(kuò)展規(guī)模,總線和共享內(nèi)存則相反。

以上從局域擴(kuò)而大之的視角,我們看到了消息傳遞替換總線的趨勢(shì)。

反過來,從廣域向內(nèi)縮,規(guī)模在漸小,傳輸延時(shí)在漸短,越來越不分布式,無狀態(tài)消息傳遞帶來的可擴(kuò)展優(yōu)勢(shì)越發(fā)無用武之地,其額外封裝帶來的額外延時(shí)逐漸承擔(dān)了端到端延時(shí)的大頭。

除去額外的消息封裝和傳輸操作,所有不多的實(shí)體直接操作信息所在的內(nèi)存,最小化端到端延時(shí)便成了可觀的收益,因此,總線和共享內(nèi)存便是微縮版系統(tǒng)的極致了。

總結(jié)

這就兩邊都說得通了,從小規(guī)模到大規(guī)模,總線和共享內(nèi)存被消息傳遞替代,從大規(guī)模到小規(guī)模,總線和共享內(nèi)存則是消息傳遞的優(yōu)化。

就像廣義相對(duì)論,牛頓力學(xué),量子力學(xué)一樣,不同的規(guī)模尺度有不同的哲學(xué)。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5465

    瀏覽量

    172822
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3064

    瀏覽量

    74374
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2904

    瀏覽量

    88443

原文標(biāo)題:深刻理解 | 以通信方式共享內(nèi)存,不要以共享內(nèi)存方式通信

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    內(nèi)存共享原理解析

    內(nèi)存共享是一種在多個(gè)進(jìn)程之間共享數(shù)據(jù)的機(jī)制,它允許不同的進(jìn)程直接訪問同一塊內(nèi)存區(qū)域,從而實(shí)現(xiàn)數(shù)據(jù)的快速傳遞和通信。
    的頭像 發(fā)表于 02-19 15:11 ?1412次閱讀
    <b class='flag-5'>內(nèi)存</b><b class='flag-5'>共享</b>原理解析

    關(guān)于共享內(nèi)存的函數(shù)shmget()

    Linux進(jìn)程間通信源碼剖析,共享內(nèi)存(shmget函數(shù)詳解)標(biāo)簽: linuxstruct數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)systemobject2010-12-22 23:18 8567人閱讀 評(píng)論(1
    發(fā)表于 09-24 15:47

    linux如何共享內(nèi)存實(shí)驗(yàn)

    更多技術(shù)文章地址:http://www.hqyj.com/news/emb211.htm?lcg-opendv  1.實(shí)驗(yàn)?zāi)康摹 ⊥ㄟ^編寫共享內(nèi)存實(shí)驗(yàn),進(jìn)一步了解使用共享內(nèi)存的具體步驟
    發(fā)表于 06-08 07:47

    linux中的共享內(nèi)存是指什么?共享內(nèi)存有哪些優(yōu)缺點(diǎn)

    什么是進(jìn)程?進(jìn)程有哪幾種狀態(tài)?共享內(nèi)存是指什么?共享內(nèi)存有哪些優(yōu)缺點(diǎn)?
    發(fā)表于 02-28 09:32

    理解并使用共享內(nèi)存

    上一個(gè)專欄討論了執(zhí)行模型和內(nèi)核啟動(dòng)執(zhí)行配置如何影響寄存器數(shù)量以及本地多處理器資源(比如共享內(nèi)存,share memo~)?,F(xiàn)在我們繼續(xù)討論內(nèi)存的性能以及共享
    發(fā)表于 09-25 16:30 ?33次下載

    基于共享內(nèi)存多核數(shù)據(jù)結(jié)構(gòu)研究

    不可預(yù)期的結(jié)果,因而我們面臨著嚴(yán)峻挑戰(zhàn).針對(duì)基于共享內(nèi)存多核時(shí)代數(shù)據(jù)結(jié)構(gòu)的相關(guān)研究進(jìn)行綜述.首先,對(duì)比了并發(fā)與并行的區(qū)別,歸納了基于演進(jìn)條件(progress condition)的多核數(shù)據(jù)結(jié)構(gòu)分類,對(duì)近年來學(xué)術(shù)界對(duì)各種類型并發(fā)
    發(fā)表于 01-15 11:34 ?0次下載

    共享內(nèi)存IPC原理,Linux進(jìn)程間如何共享內(nèi)存?

    共享內(nèi)存是在內(nèi)存中單獨(dú)開辟的一段內(nèi)存空間,這段內(nèi)存空間有自己特有的數(shù)據(jù)結(jié)構(gòu),包括訪問權(quán)限、大小和最近訪問的時(shí)間等。該數(shù)據(jù)結(jié)構(gòu)定義如下
    的頭像 發(fā)表于 07-16 13:43 ?8692次閱讀
    <b class='flag-5'>共享</b><b class='flag-5'>內(nèi)存</b>IPC原理,Linux進(jìn)程間如何<b class='flag-5'>共享</b><b class='flag-5'>內(nèi)存</b>?

    深入剖析Linux共享內(nèi)存原理

    不同進(jìn)程之間進(jìn)行通信,需要讓不同進(jìn)程共享相同的物理內(nèi)存,Linux通過? 共享內(nèi)存 ?來實(shí)現(xiàn)這個(gè)功能。下面先來介紹一下Linux系統(tǒng)的共享
    的頭像 發(fā)表于 10-30 09:52 ?2355次閱讀
    深入剖析Linux<b class='flag-5'>共享</b><b class='flag-5'>內(nèi)存</b>原理

    通過使用CUDA GPU共享內(nèi)存

    共享內(nèi)存是編寫優(yōu)化良好的 CUDA 代碼的一個(gè)強(qiáng)大功能。共享內(nèi)存的訪問比全局內(nèi)存訪問快得多,因?yàn)樗挥谛酒稀?/div>
    的頭像 發(fā)表于 04-11 10:03 ?7534次閱讀

    Linux系統(tǒng)的共享內(nèi)存的使用

    但有時(shí)候?yàn)榱俗尣煌M(jìn)程之間進(jìn)行通信,需要讓不同進(jìn)程共享相同的物理內(nèi)存,Linux通過 共享內(nèi)存 來實(shí)現(xiàn)這個(gè)功能。下面先來介紹一下Linux系統(tǒng)的共享
    的頭像 發(fā)表于 11-14 11:55 ?1376次閱讀

    CUDA編程共享內(nèi)存

    共享內(nèi)存是使用__shared__內(nèi)存空間說明符分配的。
    的頭像 發(fā)表于 05-19 15:32 ?1205次閱讀
    CUDA編程<b class='flag-5'>共享</b><b class='flag-5'>內(nèi)存</b>

    Linux進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信

    在上面的例程中,我們首先使用ftok()函數(shù)生成一個(gè)key值作為共享內(nèi)存的標(biāo)識(shí)符。然后使用shmget()函數(shù)創(chuàng)建共享內(nèi)存區(qū)域,shmaddr指向
    發(fā)表于 06-19 09:55 ?663次閱讀

    內(nèi)存溢出與內(nèi)存泄漏:定義、區(qū)別與解決方案

    內(nèi)存溢出與內(nèi)存泄漏:定義、區(qū)別與解決方案? 內(nèi)存溢出和內(nèi)存泄漏是計(jì)算機(jī)科學(xué)中常見的問題,在開發(fā)和調(diào)試過程中經(jīng)常會(huì)遇到。本文將詳細(xì)介紹
    的頭像 發(fā)表于 12-19 14:10 ?3059次閱讀

    前端總線頻率與外頻的區(qū)別

    前端總線頻率與外頻是計(jì)算機(jī)系統(tǒng)中兩個(gè)重要的概念,它們之間存在明顯的區(qū)別。以下是對(duì)這兩個(gè)概念對(duì)比: 一、定義與功能 前端總線頻率 : 定義 :前端總線頻率是指在電子設(shè)備中用于傳輸數(shù)據(jù)的數(shù)
    的頭像 發(fā)表于 10-10 17:02 ?680次閱讀

    前端總線內(nèi)存頻率怎么配

    前端總線(FSB)與內(nèi)存頻率的配合是確保計(jì)算機(jī)系統(tǒng)穩(wěn)定運(yùn)行并發(fā)揮最佳性能的關(guān)鍵因素之一。以下是對(duì)前端總線內(nèi)存頻率配合關(guān)系的介紹: 一、前端總線
    的頭像 發(fā)表于 10-12 09:10 ?404次閱讀