Sobes.tech
Senior

Որոնք տեխնիկական պատմություններ կան — ոչ թե վերևից մուտք գործելու մասին, այլ մանրամասների խորացման, իրական խնդիրային դեպքի մասին?

sobes.tech AI

Պատասխան AI-ից

Go-ի իրական խնդիրներից մեկը տվյալների մրցակցությունն է՝ աշխատելիս տվյալների կառուցվածքներին համաժամանակյա մուտքի ժամանակ, հատկապես քարտեզների (map) օգտագործման ժամանակ:

Go-ում քարտեզը չի ապահովում միաժամանակյա մուտքի անվտանգություն, և միաժամանակ ընթերցում և գրառում առանց սինխրոնիզացիայի հանգեցնում է ռնգեղջյուրի ժամանակային փոթորիկների:

Օրինակ՝

  • Բարձր բեռով ծառայությունում մի քանի goroutine միաժամանակ թարմացնում և կարդում են քարտեզը առանց մուտքագրիչի:
  • Սա հանգեցնում է պատահական ռնգեղջյուրների՝ հաղորդագրությամբ "concurrent map read and map write":

Որոշում՝

  • Օգտագործել sync.RWMutex քարտեզի պաշտպանության համար:
  • կամ օգտագործել sync.Map, որը օպտիմիզացված է համաժամանակյա մուտքի համար:

Այս դեպքը ցույց է տալիս լեզվի և ստանդարտ գրադարանի ներքին գործառույթների խոր հասկացության կարևորությունը՝ խուսափելու նուրբ սխալներից արտադրությունում: