老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

go語言互斥 go語言并發

Go語言——sync.Map詳解

sync.Map是1.9才推薦的并發安全的map,除了互斥量以外,還運用了原子操作,所以在這之前,有必要了解下 Go語言——原子操作

成都創新互聯長期為1000多家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為雙橋企業提供專業的成都網站制作、網站建設,雙橋網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發。

go1.10\src\sync\map.go

entry分為三種情況:

從read中讀取key,如果key存在就tryStore。

注意這里開始需要加鎖,因為需要操作dirty。

條目在read中,首先取消標記,然后將條目保存到dirty里。(因為標記的數據不在dirty里)

最后原子保存value到條目里面,這里注意read和dirty都有條目。

總結一下Store:

這里可以看到dirty保存了數據的修改,除非可以直接原子更新read,繼續保持read clean。

有了之前的經驗,可以猜測下load流程:

與猜測的 區別 :

由于數據保存兩份,所以刪除考慮:

先看第二種情況。加鎖直接刪除dirty數據。思考下貌似沒什么問題,本身就是臟數據。

第一種和第三種情況唯一的區別就是條目是否被標記。標記代表刪除,所以直接返回。否則CAS操作置為nil。這里總感覺少點什么,因為條目其實還是存在的,雖然指針nil。

看了一圈貌似沒找到標記的邏輯,因為刪除只是將他變成nil。

之前以為這個邏輯就是簡單的將為標記的條目拷貝給dirty,現在看來大有文章。

p == nil,說明條目已經被delete了,CAS將他置為標記刪除。然后這個條目就不會保存在dirty里面。

這里其實就跟miss邏輯串起來了,因為miss達到閾值之后,dirty會全量變成read,也就是說標記刪除在這一步最終刪除。這個還是很巧妙的。

真正的刪除邏輯:

很繞。。。。

golang多線程簡單邏輯

實現指定個核心最大化使用,比如核心總數減一。

必要的庫。

要使用的cpu數量,建議不全使用。

建立管道。

聲明使用的cpu數。

建立互斥關系,本例中主要為了實現所有線程執行完后再執行后續程序。

創建cpu數減1個線程

后面每個任務結束時要done一個wg,這里根據具體情況加,是循環就在每個循環里加,保證后面能全部done即可

沒有緩沖的、阻塞式的往管道傳遞字符串。

Wait是等所有線程都執行完,即增加的數字被全done掉。

關閉管道。

假設已有的函數是ReadLogs,在它的基礎上加個Wg加函數名的新函數,我覺得這種方式不改變原有的,比較舒服。

大意是:循環從管道讀取字符串,讀不到了就跳出循環。

每個ReadLogs()之后加一個wg.Done(),相當于計數減一。

ReadLogs()就是要執行的任務,不再解釋。

就是開指定個線程。

管道阻塞傳值。

wg同步。

WgReadLogs循環接收。

為什么不使用Go語言呢?

今年的早些時候我們對比過了幾種native編程語言,包括D語言、Go、Rust和Vala。這里我們將分析來自Google的Go語言,看看他到底哪里跟別的語言不一樣。 Go語言比其他的很多語言都吸引我,雖然我不是Go語言的專家,但是我很樂意在這里介紹一下它的特性,下面的這些特性指引我轉向了Go語言。 快速簡單的編譯: go語言編譯的很快,事實上,他快的甚至可以作為腳本語言了。幾個使他編譯很快的原因有: 他不使用頭文件當A依賴B,B又依賴C時,那么首先會編譯C,然后是B和A;但是如果A依賴B,但是A并不直接依賴于C,而是存在依賴傳遞,這時會把所有B需要從C拿到的信息放在B的對象代碼里。這樣,當編譯A的時候,就不需要再管C了。在編譯程序時,只需將類型信息沿著依賴關系樹向上遍歷即可,如果到達樹的頂端,則只需編譯緊鄰的依賴,而不用管其它層級的依賴了。通過多返回值的錯誤處理: 現代的編程語言基本上有兩種錯誤處理辦法,例如在C語言里是使用返回值,而在Java等面向對象語言里使用異常處理返回值,因為返回值的狀態碼總是可能跟需要返回的結果有沖突。Go語言允許多返回值,從某種程度上解決了這個問題。你可以為你的函數的執行結果狀態定義返回值,任何調用的時候都可以來檢查,很方便。簡單的組合: 可以使用interface為對象指定一些類型的成員,還可以像Java一樣給他們指定操作(行為)。例如在標準庫的io包中定義了一個Writer,就有一個帶有字節數組作為參數(輸入)一個integer值和錯誤碼作為返回值(輸出)的方法。而實現了io.Writer接口中的Write方法的類型才是實際被執行的。這個設計能夠非常優雅的分離代碼,還簡化了單元測試過程,例如,如果你想測試一個數據庫對象的一個方法,在傳統的語言中你必須創建一個數據庫對象,然后做很多協議初始化工作。在Go語言中,你可在接口下創建任何對象。簡單的并發: 在Go中并發變得非常的簡單,在任何函數前方上go兩個字母,這個函數就將以他自己的go-routine(一個非常輕量級的線程)來運行,Go- routines之間通過channels來通信。我們通常會有一些需要線程同步和互斥的需求,在Go中非常簡單,Go只是啟動并發任務,各個任務之間通過channels來通信,從而協調同步和互斥。優秀的錯誤提示: 我從沒見過別的語言有Go語言這么高的錯誤診斷質量。例如如果你的程序思索了,Go的運行時可以通知你,而且,他甚至可以告訴你是哪個線程出了問題。當然編譯錯誤也是很詳細很有用的。其他特性:Go語言還有其他非常吸引人的特性:高階函數、垃圾回收、哈希映射、可擴展的數組等等。當然了,沒有一件東西是非常完美的,Go語言的開發工具還非常缺乏,社區很小,但是這個語言的背后支持者是Google,這些問題都會一步一步的解決。當其他語言,尤其是D語言、Rust、Vala旨在簡化C++而且增加新的特性的時候,他們都覺得自己像是帶著新特性的C++。


標題名稱:go語言互斥 go語言并發
當前URL:http://www.xueling.net.cn/article/hphiph.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 未亡人人妻一区三区三区 | 亚洲精品成人网站在线 | 国产精品爱久久久久久久 | 精品在线91 | 国产一级免费看视频欧美激情 | 中国黄色片视频 | 豪放女大兵免费看 | 国产视频不卡一区 | 国产精品久久久久久久午夜 | 18禁在线无码无遮挡观看视频 | 九九久久久久99精品 | 欧美激情在线一区二区 | 91综合中文字幕乱偷在线 | 韩国19禁无遮挡啪啪无码网站 | 1000部又爽又黄无遮挡的视频 | 奇米四色影视 | 女女女女bbbb毛片免费视频 | 一级网站在线观看 | 草逼91| 久久夜色精品亚洲噜噜国产mv | 亚洲日本成人在线观看 | 在线观看免费一区 | 国产成人精品久久一区二区三区 | A∨在线视频播放 | 日韩毛片国产精品一区二区 | 欧美区国产 | 性淫视频| 一级免费a一片 | 丰满美女一级毛片 | 天天操好逼| 久久久久久成人毛片免费看 | 日夜操天天干 | 国产精品久久久久久久久晋中 | 国产v无毛 | 野花在线无码视频在线播放 | 亚洲综合无码一区二区三区 | 国产精品一区二区久久久久 | 羞羞答答av成人免费看 | 国产精品色区在线观看 | 亚洲欧洲日韩国内高清 | 国产香蕉一区二区在线网站 |