Middle
Van közös run loop minden sorhoz, vagy minden sor saját run loopja van?
sobes.tech MI
Válasz az MI-től
A futás (Run Loop) a szállal (thread) van összekapcsolva, nem a sorral (queue). Minden fő szál (main thread) rendelkezik saját futási ciklussal, amely automatikusan létrejön. A háttér szálak alapértelmezés szerint nem rendelkeznek vele, de szükség esetén létrehozhatók és elindíthatók. A GCD sorok (queues) nem rendelkeznek saját futási ciklussal; feladataikat egy szálmedencén (thread pool) alapulva kezelik (néha a fő szálat használva).
// A jelenlegi futási ciklus lekérése a jelenlegi szálhoz
let currentRunLoop = RunLoop.current
// Ellenőrizze, hogy a jelenlegi szál a fő szál-e
if Thread.isMainThread {
print("A jelenlegi szál a fő")
// A fő szálnak mindig van futási ciklusa
} else {
print("A jelenlegi szál háttérszál")
// A háttérszálaknak szükség szerint létre kell hozni és el kell indítani a futási ciklust
}
// A GCD sorok nem rendelkeznek run loop tulajdonsággal
// DispatchQueue.global().sync {
// Egyszerűen hajtsa végre a feladatot
// }
- Fő szál: Automatikusan létrehozott
RunLoop-al rendelkezik. Kezeli a UI eseményeket, időzítőket és más aszinkron műveleteket. - Háttér szálak: Szükség szerint rendelkezhetnek
RunLoop-al (pl. időzítők vagy portok kezelésére), de manuálisan kell inicializálni és indítani. - GCD sorok: Nem használják közvetlenül a
RunLoop-ot. Feladatokat helyeznek el egy sorba, amely ezután elérhető szálakon fut a poolból.