Sobes.tech
Junior — Middle

Оё имкон дорад, ки маълумотҳоро дар каналда бидуни истифодаи буфер ҳамзамон нависем?

sobes.tech AI

Ҷавоб аз AI

Дар Go каналҳо метавонанд бо буфер ё бе буфер бошанд. Дар канали бе буфер, навиштан (пешниҳод) то он даме, ки дигар goroutine арзишро аз канали хонда натавонад, блоқ мешавад.

Ҳамзамон навиштан ба канали бе буфер имконнопазир аст, зеро фиристодан то қабул кардан блоқ мешавад, ва танҳо як фиристанда метавонад маълумотро дар як вақт интиқол диҳад.

Агар лозим бошад, ки ҳамзамон навиштан бе блоқ кардан анҷом дода шавад, канали бо буфер истифода мешавад, ки дар он фиристанда метавонад маълумотро дар буфер гузорад, бе интизори қабул кардан.

Масалан, канали бе буфер:

ch := make(chan int) // канали бе буфер

// Фиристодан блоқ мешавад, то он ки касе хонда бошад
ch <- 1

Барои ҳамзамон навиштан бе блоқ, буфер лозим аст:

ch := make(chan int, 2) // буфер бо 2 унсур
ch <- 1 // блоқ намешавад
ch <- 2 // блоқ намешавад

Хулоса: бе буфер, навиштани ҳамзамон имконнопазир аст.