<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國際加速解決方案。 廣告
                首先我們先看下進程和線程還有協程之間的區別: * 進程 計算機的操作系統模式是一種多任務系統,操作系統接管了所有的硬件資源,并且本身運行在一個受硬件保護的級別。所有的應用程序都以進程(process)的方式運行在比操作系統權限更低的級別,每個進程都有自己獨立的地址空間,使得進程之間的地址空間相互隔離。CPU由操作系統一進行分配,每個進程根據進程的優先級的高低都有機會得到CPU,但是如果允許時間超出了一定的時間,操作系統會暫停該進程,將CPU資源分配給其他等待的進程。這種CPU的分配方式即所謂的搶占式,操作系統可以強制剝奪CPU資源并且分配給它認為目前最需要的進程。如果操作系統分配給每個進程的時間都很短,即CPU在多個進程間快速地切換,從而造成了很多進程都在同時運行的假象。 * 線程 線程有時被稱為輕量級進程(Lightweight Process),是程序執行流的最小單元,一個標準的線程由線程ID,當前指令指針(PC)、寄存器集合和堆棧組成,通常意義上,一個進程??一個到多個線程組成,各個線程之間共享程序的內存空間(包括代碼段、數據段、堆等)及一些進程級的資源(如打開文件和信號)。 * 協程 協程(coroutine)是Go語言中的輕量級線程實現,由Go運行時(runtime)管理。 進程、線程、協程的關系和區別: * 進程擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系統調度。 * 線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度(標準線程是的)。 * 協程和線程一樣共享堆,不共享棧,協程由程序開發者在協程的代碼里顯示調度。 為什么協程比線程輕量? a. go協程調用跟切換比線程效率高. 線程并發執行流程:?線程是內核對外提供的服務,應用程序可以通過系統調用讓內核啟動線程,由內核來負責線程調度和切換。線程在等待IO操作時線程變為unrunnable狀態會觸發上下文切換。現代操作系統一般都采用搶占式調度,上下文切換一般發生在時鐘中斷和系統調用返回前,調度器計算當前線程的時間片,如果需要切換就從運行隊列中選出一個目標線程,保存當前線程的環境,并且恢復目標線程的運行環境,最典型的就是切換ESP指向目標線程內核堆棧,將EIP指向目標線程上次被調度出時的指令地址。 go協程并發執行流程:不依賴操作系統和其提供的線程,golang自己實現的CSP并發模型實現:M, P, G .go協程也叫用戶態線程,協程之間的切換發生在用戶態。在用戶態沒有時鐘中斷,系統調用等機制,因此效率高 b. go協程占用內存少. 執行go協程只需要極少的棧內存(大概是4~5KB),默認情況下,線程棧的大小為1MB。goroutine就是一段代碼,一個函數入口,以及在堆上為其分配的一個堆棧。所以它非常廉價,我們可以很輕松的創建上萬個goroutine,但它們并不是被操作系統所調度執行。 因此協程和線程一樣共享堆,不共享棧,協程由用戶態下面的輕量級線程。
                  <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>

                              哎呀哎呀视频在线观看