<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 并行和并發總體概念 并發:在單核 CPU 系統中,系統調度在某一時刻只能讓一個進程運行,雖然這種調度機制有多種形式(大多數是時間片輪巡為主),但無論如何,要通過不斷切換需要運行的進程讓其運行的方式叫并發 并行:在多核 CPU 系統中,可以讓兩個以上的進程同時運行在不同的物理核心上,這種運行的方式就是并行 **區別** 并發在微觀上不是同時執行的,只是把時間分成若干段,使多個進程快速交替的執行,因為 CPU 計算速度很快,從宏觀上看,好像這些進程都在同一個時間點執行 并行是真正的細粒度上的同時進行:既同一時間點上同時運行著多個進程 ## Actor模型 Actor模型描述了一組為了避免并發編程的常見問題的公里: 1、所有Actor狀態是Actor本地的,外部無法訪問; 2、Actor必須只有通過消息傳遞進行通信; 3、一個Actor可以響應消息:退出新Actor,改變其內部狀態,或將消息發送到一個或多個其他參與者; 4、Actor可能會阻塞自己,但Actor不應該阻塞它運行的線程; Actors模型更多的使用消息機制來實現并發,目標是讓開發者不再考慮線程這種東西,**每個Actor最多同時只能進行一樣工作,Actor內部可以有自己的變量和數據**。 Actors模型避免了由操作系統進行任務調度的問題,在操作系統進程之上,多個Actor可能運行在同一個進程(或線程)中.這就節省了大量的Context切換. 在Actors模型中,每個Actor都有一個專屬的命名”郵箱”, 其他Actor可以隨時選擇一個Actor通過郵箱收發數據,對于“郵箱”的維護,通常是使用發布訂閱的機制實現的,比如我們可以定義發布者是自己,訂閱者可以是某個Socket接口,另外的消息總線或者直接是目標Actor. ### Actor組件 ### 使用Actor模型實現 * skynet : 一個輕量級的游戲服務端框架 ## CSP(Communicating Sequential Processes)模型 Channel模型中,worker之間不直接彼此聯系,而是通過不同channel進行消息發布和偵聽。消息的發送者和接收者之間通過Channel松耦合,發送者不知道自己消息被哪個接收者消費了,接收者也不知道是哪個發送者發送的消息。 ### 使用CSP模型實現 * golang Go語言的CSP模型是有攜程Goroutine與通道Channel實現: Go攜程goroutine:是一種輕量線程,它不是操作系統的線程,而是一個操作系統線程分段使用,通過調度器實現協作式調度。是一種綠色線程,微線程,它與Gouroutine攜程也有區別,能夠在發現堵塞后啟動新的微線程。 通道channel:類似Unix的Pipe,用于攜程之間通訊和同步。攜程之間雖然解耦,但是和它們Channel有著耦合。 ## Actor模型和CSP模型區別 * CSP進程通常是同步的(即任務被推送進Channel就立即執行,如果任務執行的線程正忙,則發送者就暫時無法推送新任務),Actor進程通常是異步的(消息傳遞給Actor后并不一定馬上執行)。 * CSP中的Channel通常是匿名的, 即任務放進Channel之后你并不需要知道是哪個Channel在執行任務,而Actor是有“身份”的,你可以明確的知道哪個Actor在執行任務。 * 在CSP中,我們只能通過Channel在任務間傳遞消息, 在Actor中我們可以直接從一個Actor往另一個Actor傳輸數據。 * CSP中消息的交互是同步的,Actor中支持異步的消息交互。 Actor之間直接通訊,而CSP是通過Channel通訊,在耦合度上兩者是有區別的,后者更加松耦合。 同時,它們都是描述獨立的流程度過消息傳遞進行通信。主要的區別在于:在CSP消息交互是同步的(及兩個流程的執行的‘接觸點’,在它們交換消息處),而Actor模型是完全解耦的,可以在任意的時間將消息發送給人和未經證實的接受者。由于Actor享有更大的相互獨立性,因為它們可以根據自己的狀態選擇處理哪個傳入消息。自主性更大些。 在Go語言中為了不阻塞流程,程序員必須檢查不同的傳入消息,以便遇見確保正確的順序。CSP好處是Channel不需要緩沖消息,而Actor理論上需要一個無限大小的郵箱作為消息緩沖。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看