Sorok küldése (feladó sorok)

Párhuzamosság a kakaó, a Mac OS, az iOS környezetekben

Feladó sorok.

A Grand Central Dispatch (GCD) küldési sorok hatékony eszközei a feladatok elvégzéséhez. A várakozási sor elküldése lehetővé teszi, hogy tetszőleges blokkkötegeket hajtson végre, akár aszinkron módon, akár szinkron módon a hívó szálon. A küldési sorban szinte minden olyan feladatot végrehajthat, amelyet az egyes szálakon fut. A sorok küldésének előnye, hogy könnyebben használhatóak és sokkal hatékonyabbak a feladatok elvégzésében, mint a megfelelő többszálas kód.

A várakozási sor elküldése olyan objektumszerű struktúra, amely kezeli azokat a feladatokat, amelyek képviselik. Az elküldött sorok az elvek szerint épülnek be az adatszerkezetbe: először lépnek be, először ki. Így a sorba beillesztett feladatok mindig ugyanabban a sorrendben kezdődnek, amelyben hozzáadták őket. A GCD automatikusan elküldi a várakozási sorokat, míg másoknak bizonyos célokra létrehozhat. A 3-1. Táblázat felsorolja az alkalmazáshoz rendelkezésre álló küldési sortípusokat, valamint leírja, hogyan használhatja őket tovább.

3-1. Táblázat A soros küldési típusok

A szekvenciális sor (más néven privát diszpécser várakozási sor) egy időben végrehajtja azt a sorrendet, amelybe a sorba kerülnek. Az aktuális feladat végrehajtása különböző szálakon fut (amelyek feladatról feladatra változnak), amelyeket a várólista küldésével szabályoznak. A szekvenciális sorokat gyakran használják egy adott erőforráshoz való hozzáférés szinkronizálásához.

Annyi egymást követő sorozatot hozhat létre, amennyire szüksége van, és minden sor egyidejűleg működik az összes többi sorhoz. Más szóval, ha négy egymást követő sort hoz létre, akkor minden egyes sor csak egy feladatot végez egyszerre, de legfeljebb négy feladatot, ugyanakkor végrehajtható egyidejűleg, minden egyes sorból egyet. A soros várólista létrehozásáról bővebben lásd: "Soros küldési sor készítése".

Párhuzamos sorban (más néven a típusú globális küldő sorban (globális feladás queue)) ellátja egy vagy több feladatot egy időben, de a probléma még mindig nachanaet abban a sorrendben, ahogy azokat bekerül a sorban. Az aktuális feladat végrehajtása különböző szálakon történik, amelyeket a küldői sor kezel. A pillanatnyilag futó feladatok pontos száma változó és a rendszer feltételeitől függ.

Nem hozhat létre párhuzamos sorokat a küldéshez. Ehelyett három globális sor áll rendelkezésre az alkalmazásban egyidejűleg. Ha többet szeretne tudni arról, hogyan lehet globális párhuzamos várólistát elérni, olvassa el a "Globális párhuzamos küldési várólista megszerzése" című részt.

Fő feladási sor

A fő küldési sor egy globálisan elérhető sorrendű sor, amely a fő alkalmazási szálon végrehajtja a feladatokat. Ez a sor működik a fő alkalmazási ciklussal (ha van ilyen) a várólistán végrehajtott feladatok alternatív végrehajtásával, a fő alkalmazási ciklushoz csatolt egyéb eseményforrások végrehajtásával. Mivel a fő alkalmazási szálon fut, a fő sor gyakran az alkalmazás legfontosabb szinkronizálási pontja.

Bár nem szükséges létrehozni egy elsődleges küldési várólistát, meg kell győződnie arról, hogy az alkalmazás megfelelően halad. Ha többet szeretne tudni arról, hogy hogyan kezelhető ez a sor, olvassa el a "Funkciók futtatása a fő szálon" részt.

Amikor az alkalmazás egyidejűleg hozzáadásra kerül, a sorok küldése több előnnyel jár a szálaknál. A legközvetlenebb előny a várakozási programozási modell könnyű működése. A szálaknál kódot kell írni mind az elvégzendő feladathoz, mind a szálak létrehozásához és kezeléséhez. A várakozási sor elküldése lehetővé teszi, hogy összpontosítson arra a feladatra, amelyet valóban meg akar valósítani anélkül, hogy aggódna a szálak létrehozásával és kezelésével kapcsolatban. Ehelyett a rendszer kezeli a szálak létrehozását és kezelését. Ennek az az előnye, hogy a rendszer sokkal hatékonyabban kezelheti a szálakat, mint bármelyik egyetlen alkalmazás. A rendszer a szálak számát a rendelkezésre álló erőforrások és a rendszer aktuális állapota alapján skálázhatja. Ezenkívül a rendszer általában gyorsabban képes futtatni a feladatot, mint maga, ha saját maga létrehozta a szálat.

Bár valószínűleg úgy gondolja, hogy nehéz lenne újraírni a kódot a sorok elküldéséhez, gyakran egyszerűbb kódot írni, hogy egy sorot küldjön, mint az áramlás kódjának írása. A kulcs írja a kódot olyan feladatok kidolgozásához, amelyek önállóak, és képesek aszinkron üzemmódban dolgozni. (Valójában ez igaz a szálakra és a sorok küldésére). Azonban a sorok küldésének előnye a kiszámíthatóság. Ha a két feladat, hogy használják ugyanazon megosztott forrás, de működnek a különböző szálak, egy szál Az erőforrás először, és akkor kell használni a zár, hogy mind a célok nem változtak ezen erőforrás egyidejűleg. Várakozás esetén a feladatot egy sorozatos küldési várakozási sorhoz adhatja hozzá, így csak egy feladat bármikor megváltoztathatja az erőforrást. Ez a fajta sor alapú szinkronizáció hatékonyabb, mint a zár, mert a zár mindig igényel drága csapda mag és a megtámadott vitatott esetben, míg a sorban küldő javarészt űralkalmazási folyamat, és csak okozza a rendszermag szintjén, ahol feltétlenül szükséges.

Annak ellenére, hogy korrekt lesz azt mondani, hogy a két dolog működik menetei, nem működik egyidejűleg, meg kell emlékezni, hogy ha a két szál, hogy a zár egy időben, bármely párhuzamosság felajánlott patakok elvész vagy jelentősen csökken. Továbbá, a streaming modell segítségével két szálat kell létrehozni, amelyek mind a magot, mind a felhasználó memóriaterületét foglalják el. A sorvezető nem fizet ilyen árat a memóriák szétosztásához, és a használni kívánt szálak foglalt és nem blokkolva vannak.

Queue Binding Technologies

Amellett, hogy elküldi a várólistát, a Grand Central Dispatch számos olyan technológiát kínál, amelyek a kód kezelésére szolgáló sorokat használnak. A 3-2. Táblázat felsorolja ezeket a technológiákat, valamint azokat a linkeket, ahol további információkat találhat róluk.

3-2. Táblázat A küldési sorokat használó technológiák