国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go 源碼里的這些 //go: 指令,你知道嗎?

開發 架構
如果你平時有翻看源碼的習慣,你肯定會發現。咦,怎么有的方法上面總是寫著 //go: 這類指令呢。他們到底是干嘛用的?

[[434257]]

大家好,我是煎魚。

如果你平時有翻看源碼的習慣,你肯定會發現。咦,怎么有的方法上面總是寫著 //go: 這類指令呢。他們到底是干嘛用的?

今天和大家一同揭開他們的面紗,我將給你介紹一下他們的作用都是什么。

go:linkname

  1. //go:linkname localname importpath.name 

該指令指示編譯器使用 importpath.name 作為源代碼中聲明為 localname 的變量或函數的目標文件符號名稱。但是由于這個偽指令,可以破壞類型系統和包模塊化,只有引用了 unsafe 包才可以使用。

簡單來講,就是 importpath.name 是 localname 的符號別名,編譯器實際上會調用 localname。

使用的前提是使用了 unsafe 包才能使用。

案例

time/time.go

  1. ... 
  2. func now() (sec int64, nsec int32, mono int64) 

runtime/timestub.go

  1. import _ "unsafe" // for go:linkname 
  2.  
  3. //go:linkname time_now time.now 
  4. func time_now() (sec int64, nsec int32, mono int64) { 
  5.  sec, nsec = walltime() 
  6.  return sec, nsec, nanotime() - startNano 

在這個案例中可以看到 time.now,它并沒有具體的實現。如果你初看可能會懵逼。這時候建議你全局搜索一下源碼,你就會發現其實現在 runtime.time_now 中。

配合先前的用法解釋,可得知在 runtime 包中,我們聲明了 time_now 方法是 time.now 的符號別名。并且在文件頭引入了 unsafe 達成前提條件。

go:noescape

  1. //go:noescape 

該指令指定下一個有聲明但沒有主體(意味著實現有可能不是 Go)的函數,不允許編譯器對其做逃逸分析。

一般情況下,該指令用于內存分配優化。編譯器默認會進行逃逸分析,會通過規則判定一個變量是分配到堆上還是棧上。

但凡事有意外,一些函數雖然逃逸分析其是存放到堆上。但是對于我們來說,它是特別的。我們就可以使用 go:noescape 指令強制要求編譯器將其分配到函數棧上。

案例

  1. // memmove copies n bytes from "from" to "to"
  2. // in memmove_*.s 
  3. //go:noescape 
  4. func memmove(tofrom unsafe.Pointer, n uintptr) 

我們觀察一下這個案例,它滿足了該指令的常見特性。如下:

  • memmove_*.s:只有聲明,沒有主體。其主體是由底層匯編實現的
  • memmove:函數功能,在棧上處理性能會更好

go:nosplit

  1. //go:nosplit 

該指令指定文件中聲明的下一個函數不得包含堆棧溢出檢查。

簡單來講,就是這個函數跳過堆棧溢出的檢查。

案例

  1. //go:nosplit 
  2. func key32(p *uintptr) *uint32 { 
  3.  return (*uint32)(unsafe.Pointer(p)) 

go:nowritebarrierrec

  1. //go:nowritebarrierrec 

該指令表示編譯器遇到寫屏障時就會產生一個錯誤,并且允許遞歸。也就是這個函數調用的其他函數如果有寫屏障也會報錯。

簡單來講,就是針對寫屏障的處理,防止其死循環。

案例

  1. //go:nowritebarrierrec 
  2. func gcFlushBgCredit(scanWork int64) { 
  3.     ... 

go:yeswritebarrierrec

  1. //go:yeswritebarrierrec 

該指令與 go:nowritebarrierrec 相對,在標注 go:nowritebarrierrec 指令的函數上,遇到寫屏障會產生錯誤。

而當編譯器遇到 go:yeswritebarrierrec 指令時將會停止。

案例

  1. //go:yeswritebarrierrec 
  2. func gchelper() { 
  3.  ... 

go:noinline

該指令表示該函數禁止進行內聯。

案例

  1. //go:noinline 
  2. func unexportedPanicForTesting(b []byte, i int) byte { 
  3.  return b[i] 

我們觀察一下這個案例,是直接通過索引取值,邏輯比較簡單。如果不加上 go:noinline 的話,就會出現編譯器對其進行內聯優化。

顯然,內聯有好有壞。該指令就是提供這一特殊處理。

go:norace

  1. //go:norace 

該指令表示禁止進行競態檢測。

常見的形式就是在啟動時執行 go run -race,能夠檢測應用程序中是否存在雙向的數據競爭,非常有用。

案例

  1. //go:norace 
  2. func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid int, err Errno) { 
  3.     ... 

go:notinheap

  1. //go:notinheap 

該指令常用于類型聲明,它表示這個類型不允許從 GC 堆上進行申請內存。

在運行時中常用其來做較低層次的內部結構,避免調度器和內存分配中的寫屏障,能夠提高性能。

案例

 

  1. // notInHeap is off-heap memory allocated by a lower-level allocator 
  2. // like sysAlloc or persistentAlloc. 
  3. // 
  4. // In general, it's better to use real types marked as go:notinheap, 
  5. // but this serves as a generic type for situations where that isn't 
  6. // possible (like in the allocators). 
  7. // 
  8. //go:notinheap 
  9. type notInHeap struct{} 

 

總結

在本文我們簡單介紹了一些常見的指令集,讓大家有了整體的系統了解。這些指令平時在 Go 工程中我們是用不到的,常見的瓶頸可能更多的在自身應用上。

 

不過在了解了這些機制后,對你閱讀 Go 語言底層源碼和了解運行機制會很有幫助 :)

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2025-06-27 09:32:47

GoRedis單線程

2024-09-02 00:30:41

Go語言場景

2024-10-09 08:54:31

2022-01-05 11:40:36

Go特性語言

2021-05-31 10:22:09

Go語言代碼

2020-10-28 11:20:55

vue項目技

2021-08-05 18:21:29

Autowired代碼spring

2014-05-30 10:23:15

樂跑手環智能手環運動手環

2015-06-29 09:06:51

2022-10-24 09:57:02

runeGo語言

2020-11-18 07:52:08

2020-12-24 15:26:07

Redis數據庫

2018-05-11 15:53:59

2024-08-19 00:00:02

2016-03-18 19:03:35

認知計算IBM

2018-08-07 09:29:35

數據庫MySQL優化方法

2022-11-10 09:00:41

2015-07-03 11:20:41

編程學習方法

2024-02-26 08:19:00

WebSpring容器

2016-01-11 09:48:07

點贊
收藏

51CTO技術棧公眾號

精品久久久国产| 免费看的毛片| 日韩精品免费视频| 日本中文字幕一区二区有码在线| 色欧美激情视频在线| 日韩一卡二卡三卡| 老司机午夜精品99久久| 欧美日韩国产网站| 亚洲黄色免费三级| 亚洲国产精品女人| 石原莉奈在线亚洲二区| 亚洲奶水xxxx哺乳期| 日韩视频免费观看高清在线视频| 欧美日韩国产欧| 国模视频一区| 欧美变态视频| 神马午夜伦理影院| 国产精品久久久久不卡| 日韩一级片网址| 精品日韩中文字幕| 国产精品欧美一级免费| 国产一区二区三区91| 国产综合中文字幕| 欧美日韩国产精品| 四虎成人精品永久免费av九九| 91精品国产99久久久久久红楼| 97在线中文字幕| 一区二区三区四区视频免费观看| 久久人人爽人人| 欧美国产精品一区二区| 国产美女撒尿一区二区| 亚洲人成无码www久久久| 欧美xxx视频| 国产视频精品久久| 久久久久久久久亚洲| 青青草国产精品亚洲专区无| 夜色77av精品影院| 五月天丁香婷| 在线精品日韩| 国产视频一区二区不卡| 91亚洲国产精品| 久久久久久久亚洲精品| 天堂在线中文字幕| 奇米777四色影视在线看| 国产尤物91| 成人久久一区二区| av动漫一区二区| 国产精品v日韩精品v欧美精品网站| 日本免费一区二区视频| 美女视频黄a视频全免费观看| 男女啪啪网站视频| 亚洲在线观看免费| 久久中文亚洲字幕| 欧美日本高清| 黄色av网站在线播放| 国产无遮挡裸体视频在线观看| 亚洲一区视频| 国产成人极品视频| 国产精品456| 自拍偷拍亚洲| 人成网站免费观看| 久久精品国产精品国产精品污| 国产午夜精品久久久久久免费视 | 久久久久欧美精品| 亚洲三级毛片| 韩国一区二区在线观看| 麻豆福利在线观看| 欧美日韩在线资源| 国产一级片在线| 亚洲成a人v欧美综合天堂麻豆| 成人性生交大片免费看午夜| 青青青国内视频在线观看软件| 国产精品原创视频| 久久精品中文字幕一区| 亚洲欧美日韩国产精品| 欧美成人一二三| 成人情视频高清免费观看电影| 色诱亚洲精品久久久久久| 亚洲综合男人的天堂| 在线观看日韩国产| 国产精品女主播一区二区三区| 亚洲男人资源| 国产欧美综合精品一区二区| 精品国产一区二区三区久久狼黑人 | 一区二区三区四区亚洲| 欧美日韩亚洲一| 国产玖玖精品视频| 亚洲欧洲一区二区三区在线观看| 亚洲欧美日韩精品久久久久| 国产精品亚洲欧美| eeuss国产一区二区三区四区| 在线观看国产欧美| 中文字幕欧美精品在线| 国产精品免费久久久| 亚洲第一在线综合在线| 婷婷亚洲天堂| 欧美 日韩精品| 在线观看的毛片| 亚洲综合图片| 精品一区二区三区中文字幕视频| 成人精品3d动漫| 日韩大片在线永久免费观看网站| 久久亚洲资源中文字| 欧美色图麻豆| 中文字幕一区二区三区乱码在线| 欧美va亚洲va香蕉在线| 欧美一二三视频| 亚洲天堂av在线播放| 亚洲免费一在线| 亚洲影院在线看| 婷婷丁香六月天| 久久久久九九精品影院| 91亚洲国产成人久久精品| 成人影院天天5g天天爽无毒影院| 黄色免费视频大全| 国产精品国产三级国产专播精品人 | 美国一级片在线免费观看视频| 日韩激情视频一区二区| 在线不卡亚洲| 国产精品国产自产拍高清av| 色天天综合狠狠色| 欧美高清hd18日本| 国产成人精品在线播放| 欧妇女乱妇女乱视频| 黄a在线观看| 国产探花一区在线观看| 91精品国产入口在线| 欧美成人免费一级人片100| 桃花色综合影院| 久热成人在线视频| 26uuu久久天堂性欧美| 久久久91精品国产一区二区精品| 成人国产精品免费视频| 美女久久久久久| 日韩欧美成人一区| 在线观看免费网站| 中文字幕精品一区| 男人添女人下部高潮视频在观看| 免费网站成人| 玉足女爽爽91| 超碰影院在线观看| 国产福利一区二区三区视频在线 | 国产成人精品免费在线| 999视频在线观看| 日本v片在线免费观看| 欧美精品色网| 一道本成人在线| 国产精品欧美日韩久久| 香蕉视频网站在线观看| 久久精品国内一区二区三区水蜜桃| 国产.欧美.日韩| 日韩成人18| 成人国产激情| 欧美大片免费| 欧美aa在线观看| 黄色网在线视频| 午夜精品一区二区在线观看| 国产精品亚洲一区| 91色在线观看| 91精品在线一区| 91网站在线免费观看| 国产精品久久久| 国产免费一区视频观看免费| 国产精品1区2区在线观看| 国产不卡av在线免费观看| 国产成人免费91av在线| 国产精品免费一区豆花| 国产精品一区二区性色av| 成人激情视频在线播放| 国产主播在线一区| 亚洲a级在线观看| 国产精品日韩一区二区免费视频| 国产精品亚洲一区| 日韩电影在线播放| 国产麻豆电影在线观看| 欧美最猛性xxxx| 欧美最猛黑人xxxx黑人猛叫黄| 日韩av片免费在线观看| 精品国产91乱码一区二区三区| 欧美一级视频精品观看| 日韩一区二区三区免费看| 亚洲国产日韩欧美在线99| 亚洲精品国产精品乱码不99按摩| 亚洲欧美中文另类| 久久精品视频播放| 久久久久久久久网站| 国产精品第一视频| 99porn视频在线| 日韩av一级大片| av久久久久久| www.黄色网址.com| 亚洲一区在线免费观看| 91丝袜国产在线播放| 免费精品视频一区| 肉色丝袜一区二区| 亚洲猫色日本管| 精品欧美不卡一区二区在线观看| 一区二区三区在线视频观看58| 日韩一区二区三区在线视频| jizzjizz亚洲中国少妇|