Sobes.tech
Junior — Middle

Je možné priradiť vykonávanie gorutiny ku konkrétnemu systémovému vláknu?

sobes.tech AI

Odpoveď od AI

V jazyku Go (Golang) nie sú gorutiny viazané na konkrétne systémové vlákna. Plánovač Go sám rozdeľuje gorutiny medzi vlákna OS pre efektívne využitie zdrojov.

Ak je však potrebné vykonať kód v kontexte konkrétneho vlákna (napríklad na interakciu s knižnicou v C, ktorá vyžaduje volania z jedného vlákna), môžete použiť funkciu runtime.LockOSThread(). Táto funkcia pripne aktuálnu gorutinu k systémovému vláknu, až kým sa nevolá runtime.UnlockOSThread().

Príklad:

import (
    "runtime"
)

func main() {
    runtime.LockOSThread()
    defer runtime.UnlockOSThread()
    // kód, ktorý má byť vykonávaný v jednom systémovom vlákne
}

V bežnej praxi nie je potrebné ani odporúčané viazať gorutinu na vlákno, pretože to znižuje efektívnosť plánovača.