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.