• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件下載最安全的下載網站、值得信賴的軟件下載站!

    首頁編程開發其它知識 → Go語言并發之美:解釋其中內核、外延

    Go語言并發之美:解釋其中內核、外延

    相關軟件相關文章發表評論 來源:微博時間:2012/11/28 13:47:54字體大?。?em class="fontsize">A-A+

    作者:顏開點擊:71次評論:0次標簽: Go語言

    Flash版LOGO語言V9.8 免費簡體中文版
    • 類型:編程工具大?。?i>3.2M語言:中文 評分:6.3
    • 標簽:
    立即下載

    多核處理器越來越普及,那有沒有一種簡單的辦法,能夠讓我們寫的軟件釋放多核的威力?答案是:Yes。隨著Golang, Erlang, Scale等為并發設計的程序語言的興起,新的并發模式逐漸清晰。正如過程式編程和面向對象一樣,一個好的編程模式需要有一個極其簡潔的內核,還有在此之 上豐富的外延,可以解決現實世界中各種各樣的問題。本文以GO語言為例,解釋其中內核、外延。

    并發模式之內核

    這種并發模式的內核只需要協程和通道就夠了。其中協程負責執行代碼,通道負責在協程之間傳遞事件。

      

    并發編程一直以來都是個非常困難的工作。要想編寫一個良好的并發程序,我們不得不了解線程, 鎖,semaphore,barrier甚至CPU更新高速緩存的方式,而且他們個個都有怪脾氣,處處是陷阱。筆者除非萬不得以,決不會自己操作這些底層 并發元素。一個簡潔的并發模式不需要這些復雜的底層元素,只需協程和通道就夠了。

    協程是輕量級的線程。在過程式編程中,當調用一個過程的時候,需要等待其執行完才返回。而調用一個協程的時候,不需要等待其執行完,會立即返回。協程十分 輕量,Go語言可以在一個進程中執行有數以十萬計的協程,依舊保持高性能。而對于普通的平臺,一個進程有數千個線程,其CPU會忙于上下文切換,性能急劇 下降。隨意創建線程可不是一個好主意,但是我們可以大量使用的協程。

    通道是協程之間的數據傳輸通道。通道可以在眾多的協程之間傳遞數據,具體可以值也可以是個引用。通道有兩種使用方式。

    ·  協程可以試圖向通道放入數據,如果通道滿了,會掛起協程,直到通道可以為他放入數據為止。

    ·  協程可以試圖向通道索取數據,如果通道沒有數據,會掛起協程,直到通道返回數據為止。

     如此,通道就可以在傳遞數據的同時,控制協程的運行。有點像事件驅動,也有點像阻塞隊列。這兩個概念非常的簡單,各個語言平臺都會有相應的實現。在Java和C上也各有庫可以實現兩者。

      

    只要有協程和通道,就可以優雅的解決并發的問題。不必使用其他和并發有關的概念。那如何用這兩把利刃解決各式各樣的實際問題呢?

      相關評論

      閱讀本文后您有什么感想? 已有人給出評價!

      • 8 喜歡喜歡
      • 3 頂
      • 1 難過難過
      • 5 囧
      • 3 圍觀圍觀
      • 2 無聊無聊

      熱門評論

      最新評論

      發表評論 查看所有評論(0)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      推薦文章

      沒有數據

      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>