利用golang實現與boost中asio相同的功能

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

今天在地鐵上的時候突然想到,其實可以利用go中的channel輕易實現asio中的非同步功能。其實asio主要藉助了函數變數來將代碼封存,而它之所以這麼做是因為c和c++都不支援反映,這一點在go雷根本就不存在任何問題,直接用反映就可以搞定。而在go中非同步執行也會很簡單,因為channle天然就是一個隊列,我們一開始只需要指定channel的buffer(這一點比asio要更好用,因為通過buffer的大小我們可以解決非同步程式無法解決的流量控制問題),然後將要執行的代碼丟給channel,一個專門的goroutine來不斷的讀取channel中的執行指令,然後進行處理。其實這個多線程思想跟go語言設計中的解決並發的思想是一致的,就是通過資料移動而不是鎖來解決問題。只要保證一個資料只會在一個線程裡進行處理即可。

 

但是可惜的是,go語言目前的net包並不支援非阻塞式,而且goroutine本身就是一個閉包,而且golang號稱goroutine的消耗很小,切換的代價也很小,這樣一來似乎實現一個asio並沒有任何意義。所以這也只是上班途中一個突然的想法而已,沒啥實現的必要。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.