成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 為什么不在語言層面支持 Map 并發(fā)?

開發(fā) 后端
在今天這篇文章中,我們介紹了 Go 語言為什么不支持原生支持 map 并發(fā),核心原因是大部分場景都不需要,從性能考慮上做的考慮。

本文轉(zhuǎn)載自微信公眾號(hào)「腦子進(jìn)煎魚了」,作者陳煎魚 。轉(zhuǎn)載本文請聯(lián)系腦子進(jìn)煎魚了公眾號(hào)。

大家好,我是煎魚。

很多小伙伴學(xué)習(xí) Go 語言的語法時(shí),可能只是輕輕地看到過這個(gè)問題,結(jié)果一旦上手,多多少少一個(gè)組內(nèi)總會(huì)碰到過幾次(我經(jīng)常見到...)。

甚至?xí)l(fā)現(xiàn)有一定年限的程序員也會(huì)遇到。有小伙伴疑惑了,這么折騰,為什么 Go 不直接在語言層面就支持 map 并發(fā),直接無腦用。

那得有多香?

為什么原生不支持

憑什么 Go 官方還不支持,難不成太復(fù)雜了,性能太差了,到底是為什么?

官方答復(fù)原因如下(via @go faq):

  • 典型使用場景:map 的典型使用場景是不需要從多個(gè) goroutine 中進(jìn)行安全訪問。
  • 非典型場景(需要原子操作):map 可能是一些更大的數(shù)據(jù)結(jié)構(gòu)或已經(jīng)同步的計(jì)算的一部分。
  • 性能場景考慮:若是只是為少數(shù)程序增加安全性,導(dǎo)致 map 所有的操作都要處理 mutex,將會(huì)降低大多數(shù)程序的性能。

核心來講就是:Go 團(tuán)隊(duì)在經(jīng)過了長時(shí)間的討論后,認(rèn)為原生 map 更應(yīng)適配典型使用場景。

如果為了小部分情況,將會(huì)導(dǎo)致大部分程序付出性能代價(jià),決定了不支持原生的并發(fā) map 讀寫。且在 Go1.6 起,增加了檢測機(jī)制,并發(fā)的話會(huì)導(dǎo)致異常。

為什么要崩潰

前面有提到一點(diǎn),在 Go1.6 起會(huì)進(jìn)行原生 map 的并發(fā)檢測,這是一些人的 “噩夢”。

在此有人吐槽到:“明明給我拋個(gè)錯(cuò)就好了,憑什么要讓我的 Go 進(jìn)程直接崩潰掉,分分鐘給我背個(gè) P0”。

場景枚舉

這里我們假設(shè)一下,如果并發(fā)讀寫 map 是以下兩種場景:

產(chǎn)生 panic:程序 panic -> 默認(rèn)走進(jìn) recover -> 沒有對并發(fā) map 進(jìn)行處理 -> map 存在臟數(shù)據(jù) -> 程序使用臟數(shù)據(jù) -> 產(chǎn)生**未知((影響。

產(chǎn)生 crash:程序 crash -> 直接崩潰 -> 保全數(shù)據(jù)(數(shù)據(jù)正常)-> 產(chǎn)生**明確((風(fēng)險(xiǎn)。

你會(huì)選擇哪一種方案呢?Go 官方在兩者的風(fēng)險(xiǎn)衡量中選擇了第二種。

無論是編程,還是人生。如何在隨機(jī)性中掌握確定性的部分,也是一門極大的哲學(xué)了。

let it crash

Go 官方團(tuán)隊(duì)選擇的方式是業(yè)內(nèi)經(jīng)典的 “let it crash” 行為,很多編程語言中,都會(huì)將其奉行為設(shè)計(jì)哲學(xué)。

let it crash 是指工程師不必過分擔(dān)心未知的錯(cuò)誤,而去進(jìn)行面面俱到的防御性編碼。

這塊理念最經(jīng)典的就是 erlang 了。

總結(jié)

在今天這篇文章中,我們介紹了 Go 語言為什么不支持原生支持 map 并發(fā),核心原因是大部分場景都不需要,從性能考慮上做的考慮。

直接讓并發(fā)讀寫 map 的原因,是從 “let it crash” 去考慮。這塊如果你想在自己的工程中避免這個(gè)情況,可以在 linter 等工具鏈加入競態(tài)檢測(-race),也可以避免這類風(fēng)險(xiǎn)。

 

你覺得 Go 這塊的設(shè)計(jì)考慮怎么樣呢?

 

責(zé)任編輯:武曉燕 來源: 腦子進(jìn)煎魚了
相關(guān)推薦

2024-01-01 08:10:40

Go語言map

2024-01-05 08:45:35

Go語言map

2024-07-08 00:01:00

GPM模型調(diào)度器

2020-04-07 16:12:56

Go編程語言開發(fā)

2023-05-15 08:01:16

Go語言

2022-04-06 08:19:13

Go語言切片

2024-01-02 10:38:22

Go語言數(shù)組

2016-09-27 21:25:08

Go語言Ken Thompso

2018-05-02 12:34:48

2021-10-27 07:15:36

Go 循環(huán)引用

2024-04-07 00:04:00

Go語言Map

2024-03-12 09:13:28

Go語言main

2023-03-06 08:01:25

structGo語言

2022-01-17 16:09:43

Go語言開發(fā)

2012-05-19 22:17:30

Android

2025-07-01 07:37:27

2024-09-03 09:45:36

2021-12-09 10:51:47

Go繼承

2021-12-15 07:49:22

Go語言設(shè)計(jì)

2012-11-13 10:27:45

PythonGo編程語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲视频在线一区 | 欧美日韩专区 | 日韩一区二区久久 | 91视频在线 | 成年网站在线观看 | 韩日精品在线观看 | 久久午夜视频 | 美女爽到呻吟久久久久 | 欧美久 | 高清av电影 | av黄色在线 | 成人在线免费视频 | 91操操操 | 国产精品我不卡 | 高清色| 美女天天操 | 日韩1区2区| 亚洲毛片在线观看 | 免费观看一级特黄欧美大片 | 亚洲欧美激情国产综合久久久 | 免费激情 | 久久视频一区 | 北条麻妃国产九九九精品小说 | 欧美一区免费在线观看 | 国产精品中文字幕在线播放 | 欧美a级成人淫片免费看 | 99成人| 成人夜晚看av | 综合国产 | .国产精品成人自产拍在线观看6 | 韩日精品一区 | 精品欧美乱码久久久久久1区2区 | 狠狠色综合网站久久久久久久 | 91偷拍精品一区二区三区 | 二区国产| 午夜激情一区 | 国产在线视频网 | 免费在线看a | 久久成人免费视频 | 久久久久久久久中文字幕 | 欧美日韩精选 |