閱讀筆記 Go語言併發之美

2021-09-23 19:27:40 字數 1127 閱讀 1323

文章題目:

go語言併發之美

分享筆記:

這篇文章說的是go routine和channel在go語言中的應用。剛開始看的時候,對文章使用lua的協程來描述goroutine還真是不習慣。建議讀者不要跟者作者使用這樣的稱呼。

併發在go中得到語言級別的支援。文章列出了幾個goroutine和channel的使用方法

1 id生成器

由於id生成器會產生系統呼叫,所以假設生成隨機數這個id生成函式需要很長時間。這個時候就可以使用到併發了。當乙個goroutine在執行的時候,另外乙個id生成的goroutine在生成id。

2 多路復用

多路復用就是乙個動作可以管理或者監聽多個併發執行緒(這裡是goroutine)。文中的例子就是使用乙個chan來監聽多個goroutine,一旦有乙個goroutine對chan進行操作,下面的程式就進行了。

例子的最後也說了,實際上go也提供了select關鍵字,因此多路復用也可以使用select來對多個chan進行監聽,每個goroutine來通過乙個chan來傳遞訊息。

3 實現併發中的future技術

future技術是一種併發模式,需要併發處理的時候,建立goroutine返回乙個future,當需要這個future返回東西的時候,去future中獲取資料。這樣的好處就是在程式設計的時候的思維邏輯是流式的了。

4 併發迴圈

使用goroutine來提高迴圈的效率是最容易想到的優化效率的方法了。

5 chainfilter技術

併發的過濾器可以使用goroutine來使用。這個記得nginx的output就是使用chainfilter這樣的模式來實現。

6 共享變數

併發過程中的共享變數的使用有可能發生衝突。當然首選會想到使用鎖來對共享變數進行控制。

在golang中也可以使用channel來維護共享變數,實際達到的也是鎖的功效。

文中的例子使用乙個寫信道和乙個讀通道來保持乙個共享變數,只能從寫信道寫入,這個時候,其他的goroutine要使用寫信道是不行的,這就達到了寫鎖的功能。讀的功能也是一樣的。

7 使用超時來控制協程洩露

協程洩露說的是協程沒有合理控制結束(**)導致協程無法結束,最終導致程式阻塞無法執行了。

ps: 最後吐槽下,這篇文章的程式排版真是不爽。

數學之美 閱讀筆記(四)

這一部分主要講的是關於搜尋引擎的一些原理。乙個搜尋引擎大致需要做這麼幾件事 簡歷快速有效的索引 根據相關性對網頁進行準確的排序 實現乙個網路爬蟲在工程上需要考慮很多細節,大致有這麼幾點 頁面分析 url 提取 現在的網際網路,大多網頁是用指令碼語言生成的了,因此需要瀏覽器核心工程師來開發網路爬蟲的解...

《架構之美》閱讀筆記02

1.新 的定位 一開始就有系統結構清晰的總體檢視,所以,新的功能單元可以新增到正確的功能區域,而不是為了一時方便,隨意新增。這樣,有的時候開發者的工作會需要動寫腦筋,但是在系統維護和擴充套件時,就變得容易了 2.系統的一致性 頂層設計的良好風格和決定,為底層 好處,是統 一 整潔的。清晰的定義,確保...

《架構之美》閱讀筆記01

1丶架構是什麼 架構應該是一組結構,於一組設計規則,能減少複雜性。常見定義是,每種結構由各種型別的元件和關係組成,它們如何組合 相互呼叫 通訊 同步 及其其他互動。元件及元件之間的關係 2丶架構目的 確保利益相關人員的關注點能夠得到滿足,而在構想 計畫 構建和維護系統時,系統架構能夠處理複雜性。為了...