Allinllachu! Sutiyqa Kiryl Famin, iOS ruwaq kani. Kay qillqasqapiqa huk kutillapaqmi nisqamanta rimasunchik. GCD kunan Swift Modern Concurrency kaptin mawk'a hina rikch'akunman chaypas, kay marco llamk'achiq código achka watakuna rikhurinqapuni —ruraypipas chaymanta entrevistakunapipas. Grand Central Dispatch (GCD) Kunanqa GCD nisqamanta fundamental hamutayllapim rimarisunchik. Askha q'aytumanta llalliq aspectokunallata sut'imanta qhawasunchik, chaymanta —huk tema achka wak qillqakuna mana qhawayta munanku. Kay hamut'aykunata yuyaypi hap'ispa, aswan facil kanqa qampaq , , semaphore, mutex, chaymanta wakhina temakuna hamut'anaykipaq. filakuna q'ipikunapura tinkiynin DispatchGroup DispatchBarrier Kay qillqasqaqa allinmi kanqa qallariqkunapaqpas, yachaysapa kamaqkunapaqpas. Tukuy imata sut’i simipi sut’inchanaypaq kallpachakusaq, mana técnico nisqa términokuna nishuta cargakuspa. Contenido nisqamanta qhawariy Sapsi yuyaykuna: q'aytu, achka q'aytu, GCD, llamk'ay, fila Filakunapa layakuna: hatun, tukuypaq, sapanchasqa Filapi ñawpaqman churaykuna: Calidad de Servicio (QoS) . Fila serial y concurrente nisqakuna Llamkanakuna ruwanapaq ñankuna: async, sincronización Deadlock nisqa GCD nisqa ejerciciokuna T'inkikuna Sapsi yuyaykuna: Q'aytu, Achka q'aytu, GCD, Llamkana, Fila ima – aswanta, huk waqaychana maypi huk huñu sistema kamachiykuna churasqa chaymanta ruwasqa. Chiqamanta, llapa ruwanapaq codigo wakin q'ipipi purin. Hatun q'aytumanta, llamk'aq q'aytumanta t'aqayku. Q'aytu – huk llamk'anap achka q'ipikunata huk kutillapi (huk pachallapi) ruwayta atiynin. Kayqa achka k'allmakuna codigo paralelo nisqapi purinanpaqmi saqin. Multithreading – huk marco mayqinchus q'aytukunawan llamk'ayta yanapan (achka q'ipikunap allinninkunata aprovechaspa). Hatun primitivonkunaqa ruwanakuna, filakuna ima. Grand Central Dispatch (GCD) Chayhina, GCD huk yanapakuymi, chaymi mana sasachu qillqanapaq codigo, chaymi kuskalla ruwan. Huk sanu rikch'ana llasa yupaykunata sapaq q'ipiman uraykachiy kachkan chaymanta mana hatun q'ipipi UI musuqyachiykunata hark'anapaq. – huk huñusqa kamachiykunata ruwaqpa huñusqan. Importantemi entiendenapaq, ruwaqmi tantean mayqin codigo huk ruwanaman pertenecen. Llamkana Kay hina: print(“GCD”) // a task let database = Database() let person = Person(age: 23) // also a task database.store(person) – GCD kaqpa fundamental primitivo kaqnin, maypi paqarichiqqa ruwanakunata churan ruwanapaq. Filaqa ruwanakunata rakiymanta ruwayta hapin (sapa fila llamkanamanta q'ipi quchaman yaykuyniyuq). Fila q'ipikunapura Aswanta, filakuna saqisunkichik codigoyki ruwanakunaman organizaypi umalliyta aswan chiqamanta q'ipikuna kamachiymanta. Huk llamk'ayta huk filaman kachaptiyki, huk tarikuq q'ipipi ruwasqa kanqa — sapa kuti hukhina llamk'ayta kachanapaq llamk'achisqamanta. Llapan GIFkunap mp4 kaqninkunata tarinki otaq uraypi “T’inkikuna“ t’aqapi. kaypi Filakunapa layakuna – hatun q'ipillapi ruraq fila. Serialmi (aswan chaymanta aswan qhipaman). Hatun fila let mainQueue = DispatchQueue.main Tukuy pacha filakuna – 5 filakuna kanku (huk sapa ñawpaq ruway patapaq) sistema qusqa. Paykunaqa kuskallanmi kanku. let globalQueue = DispatchQueue.global() Sapanchasqa filakuna – ruwaqpa ruwasqan filakuna. Ruraq huk 5 ñawpaq ruwaykunamanta akllan chaymanta laya: serie utaq concurrente (ñawpaqmanta, serie kanku). let userQueue = DispatchQueue(label: “com.kirylfamin.concurrent”, attributes: .concurrent). Filapi ñawpaqman churaykuna – huk sistema filapi ñawpaqman churanapaq. Maypichus huk ruwana filasqa kachkan chay filapa aswan hatun ñawpaqman churasqa kaptin, aswan recursokuna chayman rakisqa kanku. Llapanpiqa 5 QoS nisqa patakunam kan: Calidad de Servicio (QoS) – aswan hatun ñawpaqman churasqa. Chayqa llamk'achisqa llamkanakunapaq mayqinkunachus chaylla ruwayta munanku ichataq mana hatun q'ipipi purichinapaq allinchu. Ejemplopaq, huk app kaqpi mayqinchus chiqa pacha siq'i retoque ruwayta saqin, retoque ruwasqa chaylla yupasqa kanan tiyan; ichaqa, sichus hatun q'ipi ruwasqa, UI musuqyachiykunata chaymanta gestokuna llamk'achiyta hark'anman mayqinkunachus sapa kuti hatun q'ipipi ruwakunku (kayhina, mayk'aq ruwaq dedonta retoque ruwanapaq kiti patapi llimp'in, chaymanta app chaylla ruwayta rikuchinan tiyan “dedo urapi”). Chayhinam, atisqanchikman hina chay ruwasqanchikta tarinchik mana hatun q'aytuta llasachispa. .userInteractive – huk ñawpaq ruway ruwanakunapaq mayqinkunachus utqaylla kutichiyta munanku, ichaqa mana interactivo ruwanakuna hina ancha chaniyuqchu. Sapanchasqa ruwanakunapaq llamk'achkan maypi llamk'achiq entienden ruwana mana chaylla tukukunanta chaymanta suyanan tiyan (kayhina, huk sirwiq mañakuy). .userInitiated – chay standard prioridad nisqa. Asignasqa sichus ruwaq mana huk QoS nisqa willanchu huk fila ruwachkaspa – mayk'aq mana ruwanapaq sapanchasqa mañakuykuna kanchu chaymanta ñawpaq kaynin mana contextomanta tariyta atikunmanchu (kayhina, sichus huk ruwayta huk filamanta waqyanki huk .userInitiated ñawpaqchaywan, ruwana chay ñawpaqchayta herenciata chaskikun). .default – huk ñawpaq ruway ruwanakuna mana chaylla ruwaqpa yuyayninta mañankuchu ichaqa app llamk'ayninpaq necesario kanku. Ejemplopaq, willayta huk sirwiqwan tinkiynin utaq huk autowaqaychayta discoman qillqay. .utility – aswan pisi ñawpaqman churasqa. Huk ejemplon caché pichay. .background Llapan filakunam icha hina rakisqa kanku Serial Filakuna Concurrente Filakuna – suti nisqanmanhina, kaykunaqa filakuna kanku maypi ruwanakuna hukmanta hukmanta ruwanku. Kayqa niyta munan qatiq llamk'ayqa qallarikun . Serial filakuna kunan kaq tukukuptinlla – Kay filakuna ruwanakuna paralelopi ruwayta saqin – musuq llamkana qallarikun recursokuna rakisqa kaptinku, ñawpaq ruwanakuna tukusqa kaptinpas. Reparay qallariy kamachiylla garantizasqa (huk llamkana ñawpaq filapi churasqa manaraq qhipa kaqmanta ), ichaqa tukukuy kamachiyqa mana garantizasqachu. Hukllachasqa filakuna qallarinqa Imaynatataq ruranakunata rurana Importantemi kayta yachana kunan rimachkayku ruwanakuna ruway ñankunamanta tupachisqa . Huk rimaypiqa, imayna huk llamk'ayta waqyasqaykiqa, imayna ruwanakuna ruwayta huk filaman kachasqayki q'ipipi mast'arikun chayta kamachin. waqyaq q'ipiwan ( ) . Assinkronizasqa async Asíncrono waqyayqa maypi waqyaq q'ipi mana hark'asqachu — chaymi, mana suyanchu llamk'ayta filapi churan ruwananpaq. DispatchQueue.main.async { print(“A”) } print(“B”) Kay rikch'anapi, ruwanata hatun hatun (kay codigo mana mayqin sapanchasqa fila ukhupi kasqanrayku, hatun q'ipipi ñawpaqmanta ruwasqa). Chayhina, mana hatun ruwayta suyaykuchu chaymanta chaylla ruwayta qatiyku. Kay particular ejemplopi, ruwana hatun filasqa kachkan chaymanta chaylla hatun ruwasqa . Imaraykuchus hatun kunan codigo ruwaypi llamk'achkan (hinallataq hatun filamanta ruwanakuna hatun q'ipillapi ruwayta atinku), kunan llamk'ana ñawpaqta tukun, chaymanta hatun kacharisqa kaptinlla hatun filasqa llamk'ana purin. Lluqsiyninqa kaymi: BA. q'ipimanta filapi print("A") q'ipipi print("A") filapi print("B") q'ipipi q'ipi print("B") q'ipi filapi print("A") DispatchQueue.global().async { updateData() DispatchQueue.main.async { updateInterface() } Logger.log(.success) } indicateLoading() Mana sincrónicamente huk ruwayta yapayku tukuypaq filaman ñawpaqmanta ñawpaq kaywan hatun q'ipimanta — chayrayku waqyaq q'ipi chaylla hinalla purin chaymanta waqyan . indicateLoading() Huk pachamanta, llamkana llamkanapaq yanapakuykunata rakin chaymanta q'ipi quchamanta mana qullqiyuq llamk'aq q'ipipi ruwan, chaymanta waqyasqa. updateData() kaqwan ruwanaqa hatun filaman mana sincróno kaqpi churasqa kachkan—wayaq llamk'aq q'ipi mana tukukuyninta suyanchu chaymanta purichkan. updateInterface() Llamkanakuna mana sincronizado filapi churasqa kasqankuraykum, manam seguro kayta atiykuchu haykapi recursokuna rakisqa kananta. Kayhina kaqpi, mana chiqamanta niyta atiykuchu sichus (hatun q'ipipi) utaq (huk llamk'aq q'ipipi) ñawpaqta ruwanqa (nitaq atiykuchu 1-2 llamkanakunapi: mayqinchus ñawpaqta ruwan, hatun q'ipipi utaq llamk'aq q'ipipi). Hatun q'ipi UI musuqyachiykunata, makiwan ruway ruwayta chaymanta wak urapi ruwanakunata llamk'achkan chaypas, chaywanpas sapa kuti aswan sistema yanapakuykunata chaskikun. Hukninpiqa, llamk'aq q'ipipi ruwanapaq yanapakuykuna yaqa chaylla rakisqa kanman. updateInterface() Logger.log(.success) indicateLoading() updateData() Reparay kay kawsachiypi huk tukuypaq fila llamk'ayninta wakin mana qullqiyuq llamk'aq q'ipipi ruwan ( ) . Sinkronizasqa sync Sincrónico waqyayqa maypi waqyaq q'ipi sayan chaymanta huk filapi filapi churasqa llamk'ayta tukunanpaq suyan. let userQueue = DispatchQueue(label: "com.kirylfamin.serial") DispatchQueue.global().async { var account = BankAccount() userQueue.sync { account.balance += 10 } let balance = account.balance print(balance) } Kaypi, huk q'ipimanta huk ruwayta tukuypaq filapi ruwaqmanta, huk ruwayta huk sapanchasqa filapi sincronicamente filayku, balanzata yapanapaq. Kunan q'ipiqa hark'asqam, filapi churasqa llamk'ana tukunanta suyan. Chayhina, saldoqa imprimikun sapanchasqa filapi ruwana yapayta tukuptinlla. llamk'aq Qhaway: Hawa kawsachiypi, huk sapanchasqa fila llamk'ayninta wakin mana qullqiyuq llamk'aq q'ipipi ruwan Deadlock nisqa Sincrónico ruwanakuna contextopi, ancha allinmi mana puriy atiymanta rimay —mayk'aq huk q'aytu utaq q'aytukuna wiñaypaq suyanku paykuna kikinkuta utaq paykunapura purinankupaq. Aswan riqsisqa rikch'anaqa DispatchQueue.main.sync {} waqyaymi hatun . q'ipimanta Hatun kunan ruwayta ruwaypi llamk'achkan, chay ukhupi wakin codigo sincrónicamente ruwayta munanchik. Chayhina, sinkrunu waqyayqa hatun hark'an . Llamkana hatun filasqa kachkan ichataq manam qallariyta atinchu imaraykuchus hatun harkasqa kachkan kunan llamk'ana tukunanta suyaspa —hinallataq hatun ruwanakuna hatun puriyta atinku . Kayqa qallariypi sasa qhawaypaq kanman, ichaqa llaveqa kaqwan filasqa ruwana kunan ruwanamanta hukninman tukun, chaymanta kunan ruwanamanta qhipaman filapi churachkayku. Chayrayku, q'ipiqa kunan llamk'anap huk rakinta suyan, mana qallariyta atiq, q'ipi kunan llamk'aywan hap'isqa kasqanrayku. q'ipiqa q'aytuta filapi q'ipi filapi q'ipillapi DispatchQueue.main.sync func printing() { print(“A”) DispatchQueue.main.sync { print(“B”) } print(“C”) } mana ruwayta atinchu hatun q'ipi hark'asqa kasqanrayku. Reparay hatun filamanta print("B") GCD Ejercicios nisqakuna Kay t'aqapi, kunankama llapa yachay tarisqawan, hukniray complejidadniyuq ejerciciokunamanta rimasunchik: sasan bloques de código nisqamanta entrevistakunapi tupasqaykimanta ñawpaqman puriq sasachakuykunaman, chaykunam tanqan hamut'ayniyki programacion concurrente nisqamanta. Tukuy kay ruwaykunapi tapukuyqa kaymi: ¿Imataq consolaman imprimikunqa? Yuyariy hatun filaqa serie kasqanmanta, global() filakuna kuskalla kasqanmanta, wakin kutitaq sasachakuyqa sapanchasqa filakuna sapanchasqa atributokunawan kanman. Ejercicios básicos nisqakuna Normal sasachakuyniyuq ruwaykunawan qallarisunchik – pisi chansayuq mana seguridadniyuq lluqsiypi. Kay ruwaykunan aswanta rikukun entrevistakunapi; aswan allinqa tiempoykita hap’ispa allinta t’aqwiymi chay sasachakuymanta. Tukuy ejerciciokunamanta hunt'asqa código nisqatam tarinki . kaypi Llamkana 1 print(“A”) DispatchQueue.main.async { print(“B”) } print(“C”) Hatun q'ipipiqa, nisqatam rurakun. print("A") llamk'ayqa hatun filapi mana sinkrónicamente churasqa kachkan. Hatun q'ipi llamk'achisqa kasqanrayku, kay llamk'ayqa filapi suyan. print("B") Hatun q'ipipiqa, nisqatam rurakun. print("C") Hatun q'ipi mana qullqiyuq kaptin (ñawpaq llamk'ay tukusqa kaptin, huk ruwaykuna kanman hatun q'ipipi ruwayta necesitaqkuna —mana hatun filamanta ruwanakunallachu kayhina UI musuqyachiykuna, makiwan ruway, hukkunapas. Aswan ukhu hamut'anapaq, ama hina kaspa aswanta ñawiriy kaqmanta ) filachasqa llamkana ruwasqa. RunLoop print("B") : ACB Kutichiy Llamkana 2 print(“A”) DispatchQueue.main.async { print(“B”) } DispatchQueue.main.async { print(“C”) } print(“D”) Hatun q'ipipiqa, nisqatam rurakun. print("A") llamk'ayqa hatun filapi filachasqa kachkan. Hatun fila hatun q'ipi tarikunankama. print("B") ruwanaqa print("B") nisqamanta qhipaman filasqa kachkan chaymanta suyallantaq. print("C") Hatun q'ipiqa ruwayta hinallam purin, "D" nisqatam qillqan. Hatun q'ipi tarikuptin (huk RunLoop ruwanakunata llamk'achisqamanta), ñawpaq filapi llamk'ay— —rurakun. print("B") Hatun q'ipi wakmanta kacharisqa kaptin (huk RunLoop ruwanakunata ruwasqamanta —hamuq pachapi, kay detalleta saqisaq imaraykuchus mana tukuy kamachiyta afectanchu), llamk'ana ruwasqa. print("C") : ADBC Kutichiy Chaylla rimanay wakin ejemplokunapi, sut'inchayta huk chhikanta pisiyachisaq chaymanta sistema llamadas sincrónicas ruwayta allinchasqanmanta saqisaq, chaymanta qhipaman rimasunchik. Llamkana 3 print(“A”) DispatchQueue.main.async { // 1 print(“B”) DispatchQueue.main.async { print(“C”) } DispatchQueue.global().sync { print(“D”) } DispatchQueue.main.sync { // 2 print(“E”) } } // 3 print(“F”) DispatchQueue.main.async { print(“G”) } nisqa hatun q'ipipi rurasqa. print("A") Huk mana sinkruno llamk'ana (1–3 sutiyuq) hatun filapi filachasqa kachkan mana kunan (hatun) q'ipi hark'aspa. Hatun q'ipiqa ruwayta hinallam purin, qillqan. "F" llamk'ayqa ñawpaq ruwaymanta qhipaman hatun filapi filasqa kachkan (1–3 llamkanakuna). print("G") Huk kuti hatun q'ipi kacharisqa kaptin, ñawpaq filapi llamk'ay— —rurayta qallarikun. print("B") Chaymanta llamk'ayqa hatun filapi filasqa kachkan (maypichus kunan ruwana ruwakuchkanraq, chaymanta filapi qatin). Asíncrono yapasqa kasqanrayku, mana hunt'akuyninta suyaykuchu, chaymanta chaylla ñawpaqman puriyku. print("C") print("G") Chaymanta, llamk'ayqa tukuypaq filapi filasqa kachkan. Kay waqyay sincrono kasqanrayku, tukuypaq fila ruwanankama suyayku (mayqin llamk'aq q'ipi kaqpipas purinman) manaraq purichkaspa. print("D") Tukuyninpiqa, llamk'ayqa hatun filapi filachasqa kachkan. Kay waqyayqa sinkruno kasqanrayku, kunan q'ipiqa llamk'ana tukunankama hark'asqa kanan tiyan. Ichaqa, hatun filapi ruwanakunañam kachkan, chaymanta llamk'ayqa tukukuyman yapasqa, chaymanta. Chayrayku, chay llamkanakuna ñawpaqta ruwanan tiyan manaraq purichiyta atichkaptin. Ichaqa hatun q'ipiqa kunan llamk'ayta ruwaypi llamk'achkanraq, chayrayku mana qatiq filapi llamk'aykunaman riyta atinchu. Kunan llamk'aymanta qhipaman chaymanta impriminapaq mana llamk'anakuna kaptinpas, q'ipiqa manaraqmi puririyta atirqanchu, kunan llamk'ay (1–3 llamk'aykuna) manaraq tukusqanrayku. print("E") print("E") print("E") "G" "C" Sichus waqyay mana sinkronochu karqan, imprimiy("E") llamk'ayqa chaymanta impriminapaq llamk'anakuna qhipaman filasqalla kanman. "G" "C" : AFBD Kutichiy (sichus iskay kaq waqyay karqan ): AFBDGCE Huk kutichiy async Llamkana 4 let serialQueue = DispatchQueue(label: “com.kirylfamin.serial”) serialQueue.async { // 1 print(“A”) serialQueue.sync { print(“B”) } print(“C”) } // 2 Huk ruwana (1–2 llamkanakuna) huk sapanchasqa serie fila kaqpi mana sincróno kaqpi churasqa kachkan (ñawpaqmanta, filakuna serie kanku mana atributota llamk'achisqaykumanta). .concurrent Llamkana yanapakuykunata rakiptinqa, ruway qallarikun chaymanta qillqasqa. "A" Kikin serie fila ukhupi, huk sincrono llamkana filasqa kachkan. Llamayqa sincrono kasqanraykum, q'ipiqa ruwakuyninta suyaspa harkan. print("B") Ichaqa, fila serial kasqanrayku, hawa llamk'aywan 1-2 llamk'achisqaraq kasqanrayku, llamk'ayqa mana qallariyta atinchu, chayraykutaq huk mana puriy atiymi. print("B") : A, mana puriy atiq Kutichiy Kay rikch'ana rikuchin mayqin serie filapipas mana puriy atiy ruwayta atinman —hatun fila kaqpipas utaq sapanchasqa fila kaqpipas. Llamkana 5 Ñawpaq ruwanamanta serie filata huk kuskalla kaqwan tikrasun. DispatchQueue.global().async { // 1 print("A") DispatchQueue.global().sync { print("B") } print("C") } // 2 Huk llamkana (1–2 llamkanakuna) tukuy pacha (kuklla) filapi mana sincróno nisqapi churasqa kachkan. Recursokuna rakisqa kaptin, ruway qallarikun hinaspa imprimikun. "A" Huk sinkruno waqyay ruwanapaq kikin tukuypaq filapi ruwasqa, mayqinchus kunan llamk'aq llamk'ay tukunankama hark'an. print("B") q'ipi Kayhina kaqpi, q'ipi hark'asqa kaptinpas, tukuypaq fila kaqlla kasqanrayku, qatiq llamk'ayta ruwayta qallariyta atin mana kunan kaq tukunanta suyaspa —huk q'ipipi purichispalla. Chayhina, waqyaq q'ipiqa llamk'ayta huk llamk'aq q'ipipi rurasqa kananta suyan. print("B") Llamkana tukusqa kaptin, qallariy waqyay q'ipi mana hark'asqa, qillqasqa. "C" : ABC Kutichiy Llamkana 6 print("A") DispatchQueue.main.async { // 1 print("B") DispatchQueue.main.async { // 2 print("C") DispatchQueue.main.async { // 3 print("D") DispatchQueue.main.sync { print("E") } } // 4 } // 5 DispatchQueue.global().sync { // 6 print("F") DispatchQueue.global().sync { print("G") } } // 7 print("H") } // 8 print("I") Hatun q'aytuqa nisqatam qillqan. "A" Huk asíncrono ruwana (1–8 llamkanakuna) hatun filapi filasqa kachkan mana kunan q'ipi harkaspa. Hatun q'aytuqa hinallam purin, qillqan. "I" Qhipaman, hatun q'ipi kacharisqa kaptin, hatun fila llamk'anaman filasqa ruwayta qallarikun, -tataq qillqan. "B" Huk asíncrono ruwana (2–5 llamkanakuna) hatun filapi filasqa kachkan – mana kunan q'ipi harkaspa. Kunan q'ipipi ruwayta qatispa, 6–7 llamk'aypa sinkruno kachayninmi tukuy pacha filaman ruwakun —kayqa kunan (hatun) q'ipitam hark'an llamk'ay tukunankama. 6–7 llamk'ayqa huk q'ipipi ruwayta qallarikun, nisqa qillqaspa. "F" llamk'ayqa tukuy pacha filaman hukllachasqa kachasqa, kunan llamk'aq q'ipi tukunankama hark'aspa. print("G") nisqa qillqasqa, chaymanta llamk'aq q'aytu maymantachus kay llamk'ay kachasqa karqan, mana hark'asqa. "G" 6–7 llamk'ayqa tukukun, maymantachus kachasqa karqan chayta kicharispa (hatun q'aytu), nisqa qillqasqataq. "H" 1–2 llamk'ay tukusqa kaptin, ruwayqa hatun filapi qatiq llamk'ayman kuyun —2–5 llamk'ay— chaymi qallarikun hinaspa nisqatam imprimin. "C" 3–4 llamk'ayqa hatun filapi filasqa kachkan mana q'aytuta hark'aspa. Kunan llamk'ay (2–5) tukukuptinqa, qatiq llamk'aypi (3–4) ruwayqa qallarikun, -ta imprimispa. "D" llamk'ayqa kuskalla hatun filamanmi kachasqa, kunan q'ipi hark'aspa. print("G") Chaymanta llamkana mana tukukuyniyuq suyan llamk'ayta hatun q'ipipi ruwananpaq—q'ipi hark'asqa kasqanrayku, kayqa huk mana puriy atiyman pusakun. print("E") : AIBFGHCD, mana puriy atiy Kutichiy Chawpi ejerciciokuna Chawpi sasachakuyniyuq llamkaykunaqa mana chiqap kaqwanmi. Chayna sasachakuykunaqa entrevistakunapipas tarikunmi, ichaqa pisillapim. 7 kaq llamkay DispatchQueue.global().async { print("A") } DispatchQueue.global().async { print("B") } nisqaqa tukuy pacha filapi mana sinkróno nisqapi churasqa kachkan —mana kunan q'ipi hark'aspa. print("A") Suyayku sistema tukuypaq filapi ruwanapaq yanapakuykunata rakinanta. Teoría nisqapiqa, kayqa mayk'aqllapas ruwakunmanmi —manaraq qatiq kamachiyta ruwachkaspapas, nisqapi filapi churanapaq. Kay particular casopi, qatiq ruwana ñawpaqta filaman yapasqa, chaymantalla recursokuna tukuypaq filaman rakisqa kanku. Kayqa ruwakun hatun q'ipi aswan yanapakuykunata rakisqa kasqanrayku, chaymanta hatun q'ipipi qatiq llamk'ayqa ancha llasaqmi (huk llamk'ayta yapanapaq llamk'aylla), ruwaypitaq aswan utqaylla ruwakun tukuy pacha filapi yanapakuy rakiymanta. Qatiqnin rakipim rimarisunchik contranpi kaqkunamanta. print("B") nisqa tukuypaq filapi filasqa kachkan. print("B") Chaykama, hatun q'ipiqa hinallam purin, pachantinpi filaqa kapuq rakiyta suyachkaptin. Recursokuna kaptin, iskaynin llamkanakuna ruwakun. llamk'ana imprimiy kaqmanta ñawpaqta qallarinman chaypas, mana kamachiyta garantizayta atiykuchu imaraykuchus imprimiyqa mana atómico llamk'aychu (chay rato lluqsiy consolapi rikukun llamk'ay tukukuy qayllapi kachkan). "A" "B" : (AB) . Kutichiy Paréntesis nisqapin rikukun letrakuna ima ordenpipas rikhurimunanta: AB otaq BA nisqapipas. 8 kaq ruway print("A") DispatchQueue.main.async { print("B") } DispatchQueue.global().async { print("C") } Kaypiqa, "A" nisqa ñawpaqta imprimisqa kasqanmantallam seguro kayta atichwan. Mana allintachu yachayta atiykuman sichus hatun filapi ruwana utaq tukuypaq filapi kaq aswan utqaylla ruwakunqa. : A(BC) . Kutichiy Llamkana 9 DispatchQueue.global(qos: .userInteractive).async { print(“A”) } DispatchQueue.main.async { // 1 print(“B”) } chaymanta DispatchQueue.global(qos: .userInteractive).async { print(“A”) } print(“B”) // 1 Hukninpiqa, iskaynintinpi nisqa hatun q'ipipi rurasqa. Hinallataq, mana allintachu yachayta atiyku mayk'aqchus tukuypaq filaman recursokuna rakikunqa, chayrayku teóricamente, chaylla imprimisqa kanman manaraq hatun q'ipipi // 1 marcasqa puntoman chayachkaspa. Ichaqa ruwaypiqa ñawpaq kaq ruwayqa AB nisqawanmi imprimikun, iskay kaqtaq BA nisqawanmi imprimikun. Kayqa ñawpaq kaqpi, hatun q'ipimanta qatiq RunLoop kutichiypi (utaq pisi kutichiykuna qhipaman) ruwasqa kasqanrayku, iskay kaqpitaq, kunan RunLoop kutichiypi hatun q'ipipi purinanpaq programasqa kachkan. Ichaqa manan garantizayta atiykuchu chay ordenta. print("B") "A" print("B") print("B") Iskaynin llamkaypaq : (AB) . kutichiy 10 kaq llamkay print("A") DispatchQueue.global().async { print("B") DispatchQueue.global().async { print("C") } print("D") } Sut'inmi lluqsiypa qallariynin kasqan. nisqa filapi churasqa kaspaqa, manam allintachu yachayta atiyku mayk'aq chaypaq yanapakuykuna rakisqa kananta—kay llamk'ayqa manaraq nisqamanta qhipamanpas ruwayta atinmanmi. Kayqa wakin kutipiqa ruwaypipas pasakunmi. "AB" print("C") print("D") : AB(CD) . Kutichiy Llamkana 11 let serialQueue = DispatchQueue(label: “com.kirylfamin.serial”, qos: .userInteractive) DispatchQueue.main.async { print(“A”) serialQueue.async { print(“B”) } print(“C”) } Yapamanta, mana chiqamanta yachayta atiykuchu mayk'aq recursokuna print("B") kaqpaq rakisqa kananta sapanchasqa filapi. Ruwaypiqa, hatun q'aytuman aswan ñawpaqman churasqa kasqanrayku, "C" nisqaqa "B" nisqamanta ñawpaqtaraqmi imprimin, ichataq kayqa manam garantizasqachu. : A(BC) . Kutichiy Llamkana 12 DispatchQueue.global().async { print("A") } print("B") sleep(1) print("C") Kaypi, sut'i kachkan lluqsiy BAC kanqa imaraykuchus huk segundo puñuyqa tukuy pachantinpi fila suficiente pachayuq kaqta qhawan recursokuna rakinapaq. Hatun q'ipi puñuywan hark'asqa kachkaptin (chaytaqa manam ruruchiypi ruranaykichu), huk q'ipipi ruran. print("A") : BAC Kutichiy Llamkana 13 DispatchQueue.main.async { print("A") } print("B") sleep(1) print("C") Kayhina kaptinqa, hatun filapi filasqa kasqanrayku, hatun q'ipillapim rurasqa kanman. Ichaqa, hatun q'ipiqa chiqapchayta ruraspallapunim kachkan — nisqatam qillqaspa, chaymantataq puñuspa, chaymantataq nisqatam qillqaspa. Chay qhipamanlla RunLoop filasqa ruwayta ruwayta atin. print("A") "B" "C" : BCA Kutichiy Ñawpaqman puriq ruwaykuna Manachá kay sasachakuykunawan tupankichu entrevistakunapi, ichaqa chaykunata hamut’ayqa yanapasunki aswan allinta GCD hap’inaykipaq. Kaypi Counter nisqa claseqa referencia semántica nisqallapaqmi llamk'achisqa: final class Counter { var count = 0 } Llamkana 14 let counter = Counter() DispatchQueue.global().async { DispatchQueue.main.async { print(counter.count) } for _ in (0..<100) { // 1 counter.count += 1 } } Kaypiqa, 0manta 100kama ima yupaypas imprimisqa kanman, hatun q'aytup llamk'ayninman hina. Yachasqanchikhina, mana allintachu willayta atiyku mayk'aq asíncrono ruwana recursokunata chaskinqa —chayqa kanman ñawpaq, pacha utaq qhipa llamk'aq q'ipipi llimp'i. : 0-100 Kutichiy Llamkana 15 DispatchQueue.global(qos: .userInitiated).async { print(“A”) } DispatchQueue.global(qos: .userInteractive).async { print(“B”) } QoS mana garantizanchu aswan hatun prioridadniyuq fila aswan utqaylla recursokuna chaskinanta, ichaqa iOS chayta ruwayta munanqa. Ruwaypiqa kaypi lluqsiyninqa (AB) nisqa. : (AB) . Kutichiy Llamkana 16 var count = 0 DispatchQueue.global(qos: . userInitiated).async { for _ in 0..<1000 { count += 1 } print(“A”) } DispatchQueue.global(qos: .userInteractive).async { for _ in 0..<1000 { count += 1 } print(“B”) } Mayqin ruway ñawpaqta qallarisqanmanta mana yachayta atisqaykurayku, 1000 llamk'aykunapipas mana mayqin llamk'ay aswan utqaylla tukukunanta riqsiyta atiykuchu. : (AB) . Kutichiy Llamkana 16.2 ¿Imataq lluqsiynin suyaspa operaciones qallarinku ejecutar simultáneamente? .userInteractive fila aswan yanapakuykunata rakisqa kasqanrayku, 1000 llamkanakuna span kaqpi chay filapi ruwayqa sapa kuti aswan utqaylla tukunqa. : BA Kutichiy Llamkana 17 Chayman rikchakuq ruwaywan, ñawpaq rakimanta mana chiqap kaqwan ima ruwaytapas tikrayta atichwan (kayhina, 12 kaq llamkana): let counter = Counter() let serialQueue = DispatchQueue(label: “com.kirylfamin.serial”, qos: .userInteractive) DispatchQueue.main.async { serialQueue.async { print(counter.count) } for _ in 0..<100 { counter.count += 1 } } 0manta 100kama ima yupaypas imprimikunmanmi. 0 imprimiyta atikusqanqa, 12 kaq llamk'aypi mana garantizayta atiykuchu lluqsiynin sapa kuti ñawpaqpi kananta, imaynachus esencialmente mana imapas tikrasqachu —chaylla chay llimp'iqa aswan pisi recurso-intensive huk impresomanta (reparay, llalliq qallariylla, manaraq ruwasqa kachkaptinpas, ruwaypi tukuy mana seguro kaqpi tukusqa). "C" "B" : 0-100 Kutichiy Llamkana 18 DispatchQueue.global(qos: .userInitiated).async { print(“A”) } print(“B”) DispatchQueue.global(qos: .userInteractive).async { print(“C”) } Kaypipas chayman rikchakuq situacionmi pasakun. Teoría kaqpi, aswan utqaylla ruwayta atinman kaqmanta (sichus huk pisi aswan llasa kaqwan tikranki). Ruwaypiqa nisqa ñawpaqtaraqmi imprimin. Ichaqa, manaraq filapi churachkaspa ruwasqaykuqa anchata yapan manaraq kaqpi imprimisqa kananta, chaymanta yapasqa pacha kaqpi hatun q'ipi kaqpi sapa kuti suficiente .userInitiated filapaq recursokuna chaskinanpaq chaymanta ruwanapaq. Chaywanpas, kayqa manam garantizasqachu wakin kutitaq aswan utqaylla impriminman. Chay hinaqa, teoría nisqapiqa hunt’asqa mana seguro kaymi kan; ruwaypiqa, B(CA) nisqamanmi tendenciayuq. print("A") print("B") print("B") "B" print("B") print("C") "A" "C" print("B") print("A") "C" : (BCA) . Kutichiy Llamkana 19 DispatchQueue.global().sync { print(Thread.current) } T'inkinakuypaq kayhinam: qillqakunaqa “Huk ruway allinchay hina, kay ruwayqa kunan q'ipipi hark'akunata ruwan mayk'aq atikuqtin, huk t'aqawan: hatun kachay filaman apachisqa hark'akuna sapa kuti hatun q'ipipi purin.” Kayqa niyta munan, allinchaypaq, sincrónico waqyaykuna kikin q'ipipi ruwayta atinku maymantachus waqyasqa karqanku ( kaqwan mana – llamk'achisqa ruwanakuna sapa kuti hatun q'ipipi ruwanku). Chayhinam kunan (principal) q'aytuqa imprimikun. main.sync : hatun q'aytu Kutichiy 20 kaq llamkay DispatchQueue.global().sync { // 1 print(“A”) DispatchQueue.main.sync { print(“B”) } print(“C”) } nisqallam qillqasqa kachkan, huk mana puriy atiy kasqanrayku. Allinchayrayku, ruwana (1 sutiyuq) hatun q'ipipi ruwayta qallarikun, chaymanta waqyayqa huk mana puriy atiyman pusakun. "A" main.sync : А, mana puriy atiq Kutichiy Llamkana 21 DispatchQueue.main.async { print("A") DispatchQueue.global().sync { print("B") } print("C") } Allinchayqa ruwayta mana filasqa kananpaq ruwan ichaqa “spliced” kunan ruway q'ipiman. Chayhinam, kay codigo: print("B") DispatchQueue.global().sync { print("B") } kaywan tupaqmi tukun: print(“B”) : ABC Kutichiy Kay ruwanakunamanta, sut'i kachkan main.sync ancha allinta llamk'achinayki tiyan —chaylla mayk'aqchus seguro kanki waqyay mana hatun q'ipimanta ruwasqachu. Conclusion Kay qillqasqapi, iOS kaqpi achka q'ipikuna ruwaypa sapsi hamut'ayninkunamanta t'uqyasqayku — q'aytukuna, ruwanakuna chaymanta filakuna— chaymanta paykunapura tinkiyninkunamanta. Imayna GCD ruwanakuna ruwayta kamachin chaymanta hatun, pachantinpi chaymanta sapanchasqa filakunapi maskarqayku, chaymanta serie chaymanta kuska ruwaypa chiqan kayninkunamanta rimarqayku. Chaymanta, sincrono (sincronizado) chaymanta asíncrono (sincrono) ruwana kachaymanta critica distincionesta qhawarqayku, imayna kay enfoques ordenta chaymanta pacha codigo ruwaymanta afectan chayta resaltaspa. Kay qallariy hamut'aykunata kamachiyqa ancha allinmi kutichiq, takyasqa ruwanakuna ruwanapaq chaymanta mana común trampas kaqmanta kayhina mana puriy atiykunamanta. Suyachkani kay qillqasqapi imapas allin kaqta tarisqaykita. Sichus imapas mana sut’ichu kashan chayqa, ama manchakuspa rimanakuy Telegram nisqapi mana qolqellapaq sut’inchanaykipaq: . @kfamyn Chaywan tupaq t’inkikuna YouTube canal tukuy animacionkunawan - https://www.youtube.com/@kirylfamin Ejerciciokuna hunt'asqa código - https://github.com/kfamyn/GCD-Tasks Mi Telegrama - http://t.me/kfamyn RunLoop - https://developer.apple.com/qillqakuna/fundación/runloop método qillqakuna - sync https://developer.apple.com/documentation/dispatch/dispatchqueue/sync(ruray:)-3segw