Sampla de sceitheadh ​​goroutine agus conas ceann a dhífhabhtú

Nuair a thugaim faoi fheidhm atá ag comhcheangal rith píosa cód i goroutine agus cumarsáid / cealú ag baint úsáide as cainéil, is iondúil go mbím ag iarraidh breathnú níos doimhne mar is áit iontach é sin chun sceitheadh ​​goroutine a thabhairt isteach go furasta agus is furasta na hearráidí sin a dhéanamh caill fiú amháin d’fhorbróir golang neamh-thosaitheoirí. Agus sin a rinne mé don phíosa cód seo a fuair mé i KUDO.

Cad is sceitheadh ​​goroutine ann?

Go bunúsach is cineál sceitheadh ​​cuimhne é sceitheadh ​​goroutine. Tosaíonn tú goroutine ach ní thiocfaidh deireadh leis sin go deo, ag meabhrú cuimhne atá curtha in áirithe aige go deo. Chun an sampla a phostáil mé ó KUDO a shimpliú beagán, seo sampla den chaoi ar féidir le duine sceitheadh ​​goroutine a thabhairt isteach ina dtionscadal.

Is é an rud a dhéanann an cód ná go bhfuil teorainn ama forfheidhmithe agus oibríocht thréimhsiúil ag rith taobh istigh de goroutine. Gach tic, déanaimid iarracht loighic ghnó éigin a fhíorú (dearbhú go bhfuil rud éigin sláintiúil / réidh mar shampla) - sa sampla seo ní dhéanann sé ach an glao sin a insamhladh trí chodladh agus ansin filleadh.

Mar sin cá bhfuil an sceitheadh? Sa sampla simplithe thuas, is é an teorainn ama ach 1 soicind agus an oibríocht fíoraithe ag glacadh 10 soicind. Ciallaíonn sé sin go gcuirfí an spriocdháta i bhfeidhm ar dtús, ag filleadh ó `waitReady`. Circa 9 soicind ina dhiaidh sin, faigheann ár goroutine toradh ón bhfíoraitheoir agus déanann sé iarracht scríobh isteach i doneChan. Tá Scríobh chuig cainéal gan chead ag blocáil agus níl aon duine ag éisteacht ar an gcainéal sin mar d’fhill muid ar ais ó waitReady cheana féin - agus seo ár sceitheadh!

Conas a fháil amach an bhfuil sceitheadh ​​goroutine agat?

Go ginearálta, is é do chara anseo pacáiste `runtime`. Bealach amháin is ea runtime.NumGoroutine () a úsáid i dtástáil roimh agus tar éis an fheidhm waitReady a ghlaoch. Mura bhfuil an líon goroutines roimh waitReady agus ina dhiaidh sin mar an gcéanna, tá sceitheadh ​​agat.

Rogha eile is ea leabharlann ó Uber - goleak a úsáid. Má tumann tú isteach ar an gcaoi a gcuirtear an ceann sin i bhfeidhm, braitheann sé freisin ar phacáiste runtime, an uair seo léann sé na cruacha go léir (feidhm runtime.Stack) agus tugtar isteach cúpla modh áise ar a bharr sin.