golang channel阻塞與非阻塞用法
01-27
以下代碼會deadlock為什麼?因為push和pull永遠不可能同時發生,這就是阻塞channel的不當用法。
給channel加一個buffer,只要buffer沒用盡,大家就不用阻塞。「以為加buffer就不會阻塞了嗎?沒有數據pull的時候就會阻塞啊」——這個簡單啊:這是非阻塞的pull channel
怎麼解決呢?可以這樣:
通過在另一個協程中run push代碼,使得channel的生產和消費可以同時對接,正常的阻塞使用方式。還可以這樣:這是帶超時的pull channel
以上,很基礎,希望有用。原帖:Go 這種逆天的語言,為什麼 5 年了,還沒有火起來呢? - Kenneth 的回答
推薦閱讀:
※NBA首次舉辦編程馬拉松,深度數據已成球隊新寵
※為什麼github不出中文版?
※就入門級別而言,什麼樣的代碼才能叫做「優秀的代碼」?