Намунаи ихроҷи горутин ва тарзи ислоҳи он

Вақте ки ман ба функсияе муроҷиат мекунам, ки кор кардани кодро дар горутин ва иртибот / бекоркуниро бо истифодаи каналҳо муттаҳид мекунад, ман одатан орзуи чуқуртар шуданро пайдо мекунам, зеро ин ҷои хубест барои ҷорӣ кардани ихроҷи горутин ва ин хатогиҳо хеле осон аст пазмон шудан ҳатто барои таҳиягари голангҳои наёфташуда. Ва он чизе ки ман барои ин порчаи рамзи дар KUDO пайдошуда кор кардам.

Ихроҷи горутин чист?

Ихроҷи горутин асосан як намуди ихроҷи хотира мебошад. Шумо як горутинро оғоз мекунед, вале ин ҳеҷ гоҳ қатъ намешавад, то абад дар хотираи худ нигоҳ дошта мешавад. Барои содда кардани намунае, ки ман аз KUDO гузошта будам, ин як мисоли он аст, ки чӣ тавр як лоиҳаи онҳо метавонад як варақи горотинро ҷорӣ кунад.

Рамзи чӣ кор кардани он дар он аст, ки вақти дарунии як горутин вуҷуд дорад. Ҳар лаҳзае, ки мо кӯшиш мекунем, ки ягон мантиқи тиҷоратро тафтиш кунем (тасдиқ кунем, ки ягон чизи солим / тайёр омода аст) - дар ин мисол, он танҳо зангро ҳангоми хоб ва бозгашт бармеангезад.

Пас ихтилоф дар куҷост? Дар мисоли соддакардашуда дар боло, вақти интизоршавӣ танҳо 1 сония аст, дар ҳоле ки амалиёти санҷиш 10 сонияро мегирад. Ин маънои онро дорад, ки мӯҳлати ниҳоӣ аввал аз 'waitReady' баргардонида мешавад. Тақрибан баъд аз 9 сония, горутини мо натиҷаи санҷишгарро мегирад ва кӯшиш мекунад, ки ба didChan навишта шавад. Ба канали номаҳдуд нависед, ки ин баста аст ва ҳеҷ кас дар ин канал гӯш намедиҳад, зеро мо аллакай аз интизори аз нав баргаштаем - ва ин камоли мост!

Чӣ гуна фаҳмидан мумкин аст, ки оё шумо ихроҷи горутин доред?

Умуман, маҷмӯи `runtime 'ин дӯсти шумост. Як роҳ истифодаи runtime.NumGoroutine () аст, ки дар як санҷиш пеш аз ва баъди даъват кардани функсияи waitReady. Агар шумораи goroutines пеш аз интизорӣ ва баъд аз он якхел набошанд, шумо ихроҷ доред.

Варианти дигар истифодаи китобхона аз Uber - goleak. Агар шумо дар чӣ гуна иҷро шудани он ғарқ шавед, он инчунин ба бастаи корӣ такя мекунад, дар ин вақт тамоми стекҳоро мехонад (функсияи runtime.Stack) ва дар болои он якчанд усули роҳатро ҷорӣ мекунад.