Sobes.tech
Junior — Middle

Felsorolnád a több szálú végrehajtás megvalósításában használt fő mintákat?

sobes.tech MI

Válasz az MI-től

A több szálú programozás fő mintái a következők:

  • Szálmedence (Thread Pool): egy fix számú szál, amelyeket új feladatok végrehajtására használnak újra, ez csökkenti az új szálak létrehozásának költségét.

  • Gyártó-fogyasztó (Producer-Consumer): egy vagy több szál adatokat állít elő, mások fogyasztják azokat, általában szálbiztos sor használatával.

  • Váró (Barrier): több szál szinkronizálása, hogy mind elérjen egy adott pontot, mielőtt folytatnák.

  • Mutextek és szemaforok: a közös erőforrások védelmére és az hozzáférés kezelésére.

  • Futures és ígéretek (Futures/Promises): az eredmények aszinkron megszerzése szálakról.

  • Szereplő modell: minden szereplő külön szál vagy objektum, üzenetsorral, amelyet sorban dolgoz fel.

Go-ban gyakran használnak goroutine-okat és csatornákat, amelyek sok ilyen mintát egyszerűsítenek, például egy csatorna használható a gyártó-fogyasztó minta megvalósítására:

ch := make(chan int)

// Gyártó
go func() {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch)
}()

// Fogyasztó
for val := range ch {
    fmt.Println(val)
}