Sobes.tech
Junior — Middle

Lehetséges-e egyidejűleg adatokat írni a csatornába buffer használata nélkül?

sobes.tech MI

Válasz az MI-től

Go-ban a csatornák lehetnek pufferelt vagy puffer nélküli típusúak. Puffer nélküli csatornánál az írás (küldés) blokkolódik, amíg egy másik gorutina nem olvassa ki az értéket a csatornából.

Nem lehetséges egyidejű írás puffer nélküli csatornába, mert a küldés blokkolódik a fogadásig, és csak egy küldő adhat át adatokat egy időben.

Ha blokkolás nélküli egyidejű írásra van szükség, akkor pufferelt csatornákat használnak, ahol a küldő adatokat helyezhet el a pufferbe anélkül, hogy azonnali fogadást várna.

Példa puffer nélküli csatornára:

ch := make(chan int) // puffer nélküli csatorna

// Küldés blokkolódik, amíg valaki nem olvassa
ch <- 1

Az egyidejű íráshoz blokkolás nélkül szükség van pufferre:

ch := make(chan int, 2) // 2 elemű puffer
ch <- 1 // nem blokkolódik
ch <- 2 // nem blokkolódik

Összefoglalva: puffer nélkül az egyidejű írás nem lehetséges.