Thobela! Leina la ka ke Kiryl Famin, gomme ke motšweletši wa iOS. Sehlogong se, re tla akaretša gatee ya ba moka. Le ge GCD e ka bonagala e fetilwe ke nako bjale ka ge Swift Modern Concurrency e le gona, khoutu yeo e šomišago tlhako ye e tla tšwela pele e tšwelela ka mengwaga ye mentši—bobedi tšweletšong le dipoledišanong. Grand Central Dispatch (GCD) Lehono re tla lebiša tlhokomelo fela go kwešišo ya motheo ya GCD. Re tla hlahloba feela dikarolo tše bohlokwa tša go dira ditlhale tše dintši ka botlalo, go akaretša le —e lego taba yeo dihlogo tše dingwe tše dintši di nago le tshekamelo ya go e hlokomologa. Ka dikgopolo tše ka kgopolong, go tla ba bonolo go wena go kwešiša dihlogo tša go swana le , , semaphore, mutex, bjalobjalo. tswalano magareng ga methaladi le ditlhale DispatchGroup DispatchBarrier Sehlogo se se tla ba le mohola go bobedi bao ba thomago le bahlami bao ba nago le phihlelo. Ke tla leka go hlaloša se sengwe le se sengwe ka polelo ye e kwagalago, ke efoga go imelwa kudu ga mareo a setegeniki. Kakaretšo ya Diteng Dikgopolo tša Motheo: khoele, multithreading, GCD, mošomo, mothaladi Mehuta ya mela: ka sehloohong, lefatše lohle, tloaelo Dilo tše di tlago pele mothalong: Boleng bja Tirelo (QoS) . Methaladi ya tatelano le ya nako e tee Ditsela tša go phethagatša mešomo: async, sync Go se šome gabotse Ditlwaetšo tša GCD Dikgokagano Dikgopolo tša Motheo: Thread, Multithreading, GCD, Mošomo, le Mothaladi – gabotse, setshelo moo sete ya ditaelo tša tshepedišo e bewago le go phethagatšwa. Ge e le gabotse, khoutu ka moka yeo e ka phethagatšwago e šoma godimo ga khoele e itšego. Re fapantšha magareng ga tlhale ye kgolo le ditlhale tša mošomi. Thread – bokgoni bja tshepedišo ya go phethagatša ditlhale tše mmalwa ka nako e tee (ka nako e tee). Se se dumelela makala a mantši a khoutu go šoma ka go bapelana. Multithreading – tlhako yeo e nolofatšago go šoma ka ditlhale (go diriša mehola ya go dira ditlhale tše dintši). Primitives lona ka sehloohong ke mesebetsi le methaladi. Grand Central Dispatch (GCD) Ka go realo, GCD ke sedirišwa seo se dirago gore go be bonolo go ngwala khoutu yeo e phethagatšago ka nako e tee. Mohlala o bonolo ke go fološa dikhomphuthara tše boima go khoele ye e arogilego gore o se ke wa šitišana le diapdeite tša UI go khoele ye kgolo. – sete ya ditaelo tšeo di hlophišitšwego mmogo ke motšweletši. Go bohlokwa go kwešiša gore mogaši o tšea sephetho sa gore ke khoutu efe yeo e lego ya mošomo o itšego. Mošomo Mohlala: print(“GCD”) // a task let database = Database() let person = Person(age: 23) // also a task database.store(person) – primitive ya motheo ya GCD, ke lefelo leo mogaši a beago mešomo ya phethagatšo. Mothaladi o tšea maikarabelo a go aba mešomo gare ga (mothaladi wo mongwe le wo mongwe o na le phihlelelo go letamo la ditlhale la tshepedišo). Mothaladi ditlhale Ge e le gabotse, methaladi e go dumelela go tsepamiša kgopolo go rulaganyeng khoutu ya gago ka mešomo go e na le go laola ditlhale ka go lebanya. Ge o romela mošomo godimo ga mothaladi, o tla phethagatšwa godimo ga khoele ye e lego gona — gantši e fapana le yeo e šomišwago go romela mošomo. O ka hwetša diphetolelo tša mp4 tša di-GIF ka moka goba karolong ya “Dikgokagano“ ka fase. mo Mehuta ya methaladi – mothaladi wo o phethagatšago fela godimo ga khoele ye kgolo. Ke serial (go feta ka seo ka morago). Mothaladi wo mogolo let mainQueue = DispatchQueue.main Methaladi ya lefase ka bophara – go na le methaladi ye 5 (e tee ya maemo a mangwe le a mangwe a bohlokwa) yeo e filwego ke tshepedišo. Di a direga ka nako e tee. let globalQueue = DispatchQueue.global() Methaladi ya tlwaelo – methaladi yeo e hlotšwego ke mogaši. The developer indonesia khetha e mong oa 5 pele le mofuta: seriale kapa concurrent (ka default, ba serial). let userQueue = DispatchQueue(label: “com.kirylfamin.concurrent”, attributes: .concurrent). Dilo tše di tlago pele mothalong – tshepedišo ya dilo tše di tlago pele mothalong. Ge bohlokwa bja mothaladi wo mošomo o beilwego mothalong go wona, ke moo methopo ye mentši e abelwago wona. Go na le maemo a 5 a QoS ka palomoka: Boleng bja Tirelo (QoS) – selo sa pele sa godimodimo. E šomišwa go mešomo yeo e nyakago phethagatšo ya ka pela eupša e sa swanela go šoma godimo ga khoele ye kgolo. Ka mohlala, ka tirišong yeo e dumelelago go retouching ga seswantšho ka nako ya kgonthe, sephetho sa retouch se swanetše go balwa ka pela; le ge go le bjalo, ge e ba e dirwa godimo ga khoele ye kgolo, e be e tla šitišana le diapdeite tša UI le go swara boitšhišinyo bja mmele tšeo di diregago ka mehla go khoele ye kgolo (mohlala, ge mosediriši a thelela monwana wa gagwe godimo ga lefelo leo le swanetšego go retouched, gomme tirišo e swanetše go bontšha sephetho ka pela “ka fase ga monwana”). Ka go realo, re hwetša sephetho ka lebelo ka mo go kgonegago ntle le go imetša tlhale ye kgolo. .userInteractive – selo sa pele sa mešomo yeo e nyakago ditshwaotshwao tša ka pela, le ge e le gore ga se ya bohlokwa go swana le mešomo ya tirišano. Ka tlwaelo e šomišwa go mešomo moo modiriši a kwešišago gore mošomo o ka se phethe ka ponyo ya leihlo gomme o tla swanelwa ke go leta (mohlala, kgopelo ya seva). .userInitiated – selo sa pele sa maemo. E abetšwe ge e le gore mogaši a sa laetše QoS ge a hlama mothaladi – ge go se na dinyakwa tše di itšego tša mošomo gomme bohlokwa bja wona bo ka se kgone go laolwa go tšwa go seemo (mohlala, ge o bitša mošomo go tšwa mothalong wo o nago le bohlokwa bja .userInitiated, mošomo o ja bohwa bja bohlokwa bjoo). .default – selo seo se tlago pele bakeng sa mešomo yeo e sa nyakego ditshwayotshwayo tša mosediriši tša ka pela eupša e nyakega bakeng sa tshepedišo ya tirišo. Ka mohlala, go nyalantšha ya data le seva goba go ngwala autosave go tiske. .utility – selo sa pele sa fase kudu. Mohlala ke go hlwekiša cache. .background Methaladi ka moka e arotšwe bjalo ka goba Methaladi ya Tatelano Methaladi ya Nako e tee – bjalo ka ge leina le bolela, ye ke methaladi yeo mešomo e phethagatšago ka go latelana. Se se ra gore mošomo wo o latelago o thoma fela ka morago ga ge . Methaladi ya tatelano wa bjale o fedile – Methaladi ye e dumelela mešomo go phethagatša ka go bapelana – mošomo wo mofsa o thoma ka pela ge methopo e abetšwe, go sa šetšwe gore mešomo ya peleng e phethilwe. Hlokomela gore ke fela tatelano ya go thoma yeo e kgonthišitšwego (mošomo wo o beilwego mothalong pejana o tla pele ga wa ka morago), eupša tatelano ya go phethwa ga e kgonthišetšwe. Methaladi ya nako e tee thoma Tsela ya go phethagatša mešomo Go bohlokwa go lemoga gore bjale re ahlaahla mekgwa ya phethagatšo ya mešomo ge e bapetšwa le . Ka mantšu a mangwe, mokgwa wo o bitšago mošomo ka wona o laola ka fao ditiragalo di phuthollago ka gona ka gare ga khoele yeo o romelago mošomo go tšwa go yona go ya mothalong. khoele ya go bitša ( ) . Ka go se sepelelane async Pitšo ya asynchronous ke yeo go yona khoele ya go bitša e sa thibelwego — ke gore, ga e emele mošomo wo e o beago methaladi go o phethagatša. DispatchQueue.main.async { print(“A”) } print(“B”) Mohlaleng ona, re asynchronously enqueue mosebetsi ho ka ka sehloohong ho tloha e ka sehloohong (kaha khoutu ena ha e ka hare ho moleng ofe kapa ofe itseng, e bolaoa ka khoele e ka sehloohong ka default). Ka go realo, ga re emele mošomo ka ye kgolo gomme re tšwetša pele phethagatšo ka pela. Mohlaleng wo o itšego, mošomo wa o beilwe wo mogolo gomme ka morago ga moo o phethagatšwa ka pela godimo ga ye kgolo . Ka lebaka la gore ye kgolo e swaregile ka go phethagatša khoutu ya bjale (gomme mešomo go tšwa mothalong wo mogolo e ka phethagatša fela godimo ga khoele ye kgolo), go fetša pele, gomme ke fela ka morago ga ge ye kgolo e lokologile moo mothaladi wa wo mogolo wa mošomo wa o kitimago. Setšweletšwa ke: BA. print("A") moleng khoele khoele print("A") mothalong print("B") khoele khoele print("B") khoele mothaladi print("A") DispatchQueue.global().async { updateData() DispatchQueue.main.async { updateInterface() } Logger.log(.success) } indicateLoading() Re asynchronously eketsa mosebetsi ho moleng wa lefatše le kamehla pele ho tloha khoele e ka sehloohong — kahoo khoele bitsa hang-hang tsoela pele le bitso . indicateLoading() Ka morago ga nako ye nngwe, tshepedišo e aba methopo ya mošomo gomme e o phethagatša godimo ga khoele ya mošomi wa mahala go tšwa letamong la khoele, gomme e a bitšwa. updateData() Mošomo wo o nago le o enqueued asynchronously go mothaladi o mogolo—thread ya mošomi yo a bitšago ga e emele go phethwa ga yona gomme e tšwela pele. updateInterface() Ka ge mešomo e beilwe mothalong ka go se sepelelane, re ka se kgonthišege gore methopo e tla abelwa neng. Tabeng ena, re ke ke ra bolela ka bonnete ba hore na (ka khoele e ka sehloohong) kapa (ka khoele mosebetsi) tla phethahatsa pele (leha re ka ke ka mehato 1-2: e leng phethahatsa pele, ka khoele e ka sehloohong kapa ka khoele mosebetsi). Le ge e le gore khoele ye kgolo e swaregile ka go swara diapdeite tša UI, tshepedišo ya boitšhišinyo bja mmele, le mešomo ye mengwe ya motheo, le ge go le bjalo ka mehla e amogela methopo ya tshepedišo ye e phagamego. Ka lehlakoreng le lengwe, methopo ya go bolawa godimo ga khoele ya mošomi e ka abelwa mo e nyakilego go ba ka pela le yona. updateInterface() Logger.log(.success) indicateLoading() updateData() Hlokomela gore ka go animation ye mothaladi wa lefase ka bophara o phethagatša mešomo ya wona go thread ye nngwe ya mošomi wa mahala ( ) . Ka go sepelelana sync Pitšo ya go sepelelana ke yeo go yona khoele ya go bitša e emago gomme e emela gore mošomo wo e o beilego mothalong mothalong gore o phethe. let userQueue = DispatchQueue(label: "com.kirylfamin.serial") DispatchQueue.global().async { var account = BankAccount() userQueue.sync { account.balance += 10 } let balance = account.balance print(balance) } Mo, go tšwa go khoele ya yeo e phethagatšago mošomo mothalong wa lefase ka bophara, re bea mošomo mothalong wa tlwaelo ka go sepelelana go oketša tekatekano. Khoele ya bjale e thibetšwe gomme e emela gore mošomo wo o beilwego mothalong o fetše. Ka go realo, tekatekano e gatišwa fela ka morago ga ge mošomo wo o lego mothalong wa tlwaelo o phethile koketšego. mošomi Ela hloko: Ka go animation ka godimo, mothaladi wa tlwaelo o phethagatša mešomo ya wona go thread ye nngwe ya mošomi wa mahala Go se šome gabotse Tabeng ya mešomo ya go sepelelana, go bohlokwa go ahlaahla go se šome gabotse—ge tlhale goba ditlhale di letile ka mo go sa lekanywego gore tšona goba tše dingwe di tšwele pele. Mohlala wo o tlwaelegilego kudu ke go bitša DispatchQueue.main.sync {} go tšwa go ye kgolo . khoele e kgolo e swaregile ka go phethagatša mošomo wa bjale, wo ka gare ga wona re nyakago go phethagatša khoutu ye nngwe ka go sepelelana. Ka go rialo, pitšo ya synchronous e thibela e kgolo . Mošomo o beilwe mothalong o mogolo eupša o ka se thome ka gobane e kgolo e thibetšwe e letile gore mošomo wa gona bjale o fele—gomme mešomo o mogolo e ka šoma feela o mogolo . Se se ka ba thata go se bona ka leihlo la kgopolo mathomong, eupša senotlelo ke go kwešiša gore mošomo wo o beilwego mothalong ka e ba karolo ya mošomo wa bjale, gomme re o bea mothalong ka morago ga mošomo wa bjale. Ka lebaka leo, khoele e leta karolo ya mošomo wa bjale yeo e sa kgonego go thoma ka gobane tlhale e tšerwe ke mošomo wa bjale. Khoele khoele mothalong tlhale mothalong mothalong DispatchQueue.main.sync func printing() { print(“A”) DispatchQueue.main.sync { print(“B”) } print(“C”) } Hlokomela gore print("B") go tšwa mothalong wo mogolo e ka se phethagatše ka gobane khoele ye kgolo e thibetšwe. Ditlwaetšo tša GCD Karolong ye, ka tsebo ka moka yeo e hweditšwego go fihla ga bjale, re tla ahlaahla ditlwaetšo tša go raragana mo go fapanego: go tloga go diboloko tše bonolo tša khoutu tšeo o tlago kopana le tšona dipoledišanong go ya go ditlhohlo tše di tšwetšego pele tšeo di kgoromeletšago kwešišo ya gago ya mananeo a nako e tee. Potšišo mešomong ye ka moka ke gore: Ke eng seo se tlago gatišwa go console? Gopola gore mothaladi wo mogolo ke wa tatelano, methaladi ya lefase ka bophara () ke ya nako e tee, gomme ka nako ye nngwe bothata bo ka akaretša methaladi ya tlwaelo yeo e nago le dika tše itšego. Ditlwaetšo tša motheo Re tla thoma ka mešomo ya bothata bjo bo tlwaelegilego – yeo e nago le kgonagalo ye nnyane ya go se kgonthišege ka tšweletšo. Mešomo ye ke yona yeo go nago le kgonagalo ye kgolo ya gore e tšwelele dipoledišanong; senotlelo ke go ipha nako ya gago gomme o sekaseke bothata ka kelohloko. O ka hwetša khoutu ka botlalo ya ditlwaetšo ka moka . mo Mošomo wa 1 print(“A”) DispatchQueue.main.async { print(“B”) } print(“C”) Ka khoele ka sehloohong, e bolaoa. print("A") Mošomo wa go o beilwe mothalong ka go se sepelelane mothalong wo mogolo. Ka ge khoele ye kgolo e swaregile, mošomo wo o leta mothalong. print("B") Ka khoele ka sehloohong, e bolaoa. print("C") Ge khoele ye kgolo e lokologile (ka morago ga ge mošomo wa peleng o phethilwe, go ka ba le ditiragalo tše dingwe tšeo di nyakago go šongwa godimo ga khoele ye kgolo—e sego fela mešomo go tšwa mothalong wo mogolo go swana le tša UI, go swara bja mmele, bj.bj. print("B") boitšhišinyo : ACB Karabo Mošomo wa 2 print(“A”) DispatchQueue.main.async { print(“B”) } DispatchQueue.main.async { print(“C”) } print(“D”) Ka khoele ka sehloohong, e bolaoa. print("A") Mošomo wa go o beilwe mothalong mothalong wo mogolo. Mothaladi wo mogolo go fihlela khoele ye kgolo e hwetšagala. print("B") Mošomo wa go o beilwe mothalong ka morago ga go gatiša ("B") gomme gape o a leta. print("C") Khoele e kgolo e tšwela pele go phethagatša gomme e gatiša "D". Ge khoele ye kgolo e hwetšagala (ka morago ga go swara mešomo ye mengwe ya RunLoop), tshepedišo ya mathomo ye e beilwego mothalong— —e a phethagatšwa. print("B") Ka morago ga gore khoele ye kgolo e lokologe gape (ka morago ga go swara mešomo ye mengwe ya RunLoop- nakong ye e tlago, ke tla tlogela dintlha tše ka ge e sa ame tatelano ya kakaretšo), mošomo wa go o a phethagatšwa. print("C") : ADBC Karabo Ke swanetše go bolela ka yona nako yeo gore mehlaleng ye mengwe, ke tla nolofatša tlhaloso go se nene gomme ka tlogela taba ya gore tshepedišo e optimizes phethagatšo ya megala ya synchronous, yeo re tlago go e ahlaahla ka morago. Mošomo wa 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”) } e bolaoa ka khoele ka sehloohong. print("A") Mošomo wa asynchronous (wo o swailwego ka 1-3) o beilwe mothalong mothalong wo mogolo ntle le go thibela khoele ya bjale (ye kgolo). Khoele e kgolo e tšwela pele go phethagatša gomme e gatiša . "F" Tshepetšo ya e beilwe mothalong mothalong wo mogolo ka morago ga mošomo wa peleng (megato ya 1-3). print("G") Hang ha khoele e ka sehloohong e lokolohile, tshebetso ya pele e foleng— —e qala phethagatšo. print("B") Tshepedišo ya e bewa mothalong mothalong wo mogolo (moo mošomo wa bjale o sa phethagatšago, gomme e e latela mothalong). Ka ge e okeletšwa ka go se sepelelane, ga re emele go phethagatšwa ga yona gomme re tšwela pele ka pela. print("C") print("G") Se se latelago, tshepedišo ya e beilwe mothalong wa lefase ka bophara. Ka lebaka la gore pitšo ye e sepelelana, re leta go fihlela mothaladi wa lefase ka bophara o e phethagatša (e ka šoma go thread efe goba efe ya mošomi ye e lego gona) pele re tšwela pele. print("D") Mafelelong, tshepedišo ya e beilwe mothalong mothalong wo mogolo. Ka ge pitšo ye e le ya go sepelelana, khoele ya bjale e swanetše go thibelwa go fihlela mošomo o phethwa. Le ge go le bjalo, go šetše go na le mešomo mothalong wo mogolo, gomme tshepedišo ya e okeletšwa mafelelong, ka morago ga yona. Ka fao, ditiro tšeo di swanetše go phethagatša pele pele ga ge e ka šoma. Eupša khoele ye kgolo e sa swaregile ka go phethagatša tshepedišo ya bjale, ka fao e ka se tšwele pele go ditiro tše di latelago tše di beilwego mothalong. Le ge go be go se na ditiro tša go gatiša le ka morago ga tshepedišo ya bjale, khoele e be e sa dutše e sa kgone go tšwela pele ka gobane tshepedišo ya bjale (megato ya 1-3) ga se ya hlwa e phethwa. print("E") print("E") print("E") "G" "C" Ge e ba pitšo e be e sa sepelelane, tshepedišo ya go gatiša ("E") e be e tla no bewa mothalong ka morago ga ditiro tša go gatiša le . "G" "C" : AFBD Karabo (ge e ba pitšo ya bobedi e be e le ): AFBDGCE Karabo e nngwe async Mošomo wa 4 let serialQueue = DispatchQueue(label: “com.kirylfamin.serial”) serialQueue.async { // 1 print(“A”) serialQueue.sync { print(“B”) } print(“C”) } // 2 Mošomo (megato ya 1-2) o enqueued asynchronously ka tlwaelo tatelano mothaladi (ka default, methaladi ke serial kaha re sa sebelisa tšobotsi). .concurrent Ge tshepedišo e aba methopo, phethagatšo e a thoma gomme e a gatišwa. "A" Ka gare ga mothaladi wo o swanago wa tatelano, mošomo wa go sepelelana wa go o beilwe mothalong. Ka lebaka la gore pitšo e synchronous, khoele e thibela e emetše phethagatšo ya yona. print("B") Le ge go le bjalo, ka ge mothaladi e le wa tatelano gomme o sa swaregile ka mošomo wa ka ntle 1-2, mošomo wa o ka se thome, gomme seo sa feleletša ka go se šome. print("B") : A, go se šome Karabo Mohlala wo o bontšha gore go se šome go ka direga mothalong le ge e le ofe wa tatelano—e ka ba mothaladi o mogolo goba wa tlwaelo. Mošomo wa 5 A re tšeeng sebaka sa mothaladi wa tatelano go tšwa mošomong wa peleng ka wa nako e tee. DispatchQueue.global().async { // 1 print("A") DispatchQueue.global().sync { print("B") } print("C") } // 2 Mošomo (megato ya 1-2) o bewa mothalong ka go se sepelelane mothalong wa lefase ka bophara (wa nako e tee). Ge methopo e abetšwe, phethagatšo e a thoma gomme e a gatišwa. "A" Pitšo ya go sepelelana ya go phethagatša mothalong wo o swanago wa lefase ka bophara e a dirwa, yeo e thibelago ya bjale ya mošomi go fihlela mošomo o phethwa. print("B") khoele Tabeng ye, gaešita le ge khoele e thibetšwe, ka ge mothaladi wa lefase ka bophara o le wa nako e tee, e ka thoma go phethagatša tshepedišo e latelago ntle le go emela gore ya gona bjale e fele—e fo e sepetša go thread e nngwe. Ka go realo, khoele ya go bitša e emela gore mošomo o phethagatšwe go khoele ye nngwe ya mošomi. print("B") Ka morago ga ge mošomo o phethilwe, khoele ya mathomo ya go bitša e a thibelwa, e a gatišwa. "C" : ABC Karabo Mošomo wa 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") Khoele e ka sehloohong e hatisa . "A" Mošomo wa asynchronous (megato ya 1-8) o beilwe mothalong mothalong wo mogolo ntle le go thibela khoele ya bjale. Khoele e kgolo e tšwela pele gomme e gatiša . "I" Ka morago, ge khoele ye kgolo e lokologile, yeo e beilwego mothalong go mošomo wa mothaladi wo mogolo e thoma phethagatšo gomme e phrintha . "B" Mošomo wo mongwe wa asynchronous (megato ya 2-5) o beilwe mothalong mothalong wo mogolo – e sego go thibela khoele ya bjale. Go tšwela pele go phethagatšwa godimo ga khoele ya bjale, go romelwa ga synchronous ga tshepedišo 6-7 go dirwa go mothaladi wa lefase ka bophara—se se thibela khoele ya bjale (e kgolo) go fihlela mošomo o phethwa. Tshebetso 6-7 qala ho phethahatsa ka khoele e 'ngoe, hatisa . "F" Tshepedišo ya go e romelwa ka go sepelelana mothalong wa lefase ka bophara, e thibela khoele ya bjale ya mošomi go fihlela e phetha. print("G") e gatišitšwe, gomme khoele ya mošomi yeo tshepedišo ye e rometšwego go yona e a thibelwa. "G" Tshepedišo 6-7 e phethwa, e notlolla khoele yeo e rometšwego go yona (khoele ye kgolo), gomme e a gatišwa. "H" Ka morago ga go phethwa ga tshepedišo ya 1-2, phethagatšo e hudugela go tshepedišo ye e latelago mothalong wo mogolo—tshepedišo ya 2-5—yeo e thomago le go gatiša . "C" Tshebetso 3-4 e enqueued ka moleng ka sehloohong ntle le thibela khoele. Hang ha tshebetso ya jwale (2-5) qeta, phethagatšo e thoma ka tshepedišo e latelago (3-4), go gatiša . "D" Tshepedišo ya go e romelwa ka go sepelelana mothalong wo mogolo, e thibela khoele ya bjale. print("G") Ke moka tshepedišo e leta ka mo go sa felego gore tshepedišo e gore e phethagatše godimo ga khoele ye kgolo—ka ge khoele e thibetšwe, se se lebiša go go se šome. print("E") : AIBFGHCD, go se šome Karabo Ditlwaetšo tša magareng Mešomo ya bothata bja magareng e akaretša go se kgonthišege. Mathata a bjalo a kopana le ona dipoledišanong, gaešita le ge e le ka sewelo. Mošomo wa 7 DispatchQueue.global().async { print("A") } DispatchQueue.global().async { print("B") } e enqueued asynchronously ka moleng wa lefatše lohle-ntle le ho thibela khoele jwale. print("A") Re emela gore tshepedišo e aba methopo ya mošomo mothalong wa lefase ka bophara. Ka kgopolo, se se ka direga ka motsotso ofe goba ofe—gaešita le pele o phethagatša taelo e latelago ya go beakanya . Tabeng ye e itšego, mošomo wo o latelago o okeletšwa mothalong pele, gomme ke feela ka morago ga moo methopo yeo e abelwago mothalong wa lefase ka bophara. Se se direga ka gobane khoele ye kgolo e abetšwe methopo ye mentši, gomme tshepedišo ye e latelago godimo ga khoele ye kgolo e bobebe kudu (e no ba tshepedišo ya go oketša mošomo), gomme ka go diragatša e direga ka lebelo go feta kabo ya methopo mothalong wa lefase ka bophara. Re tla ahlaahla maemo a fapanego karolong ye e latelago. print("B") e enqueued ka moleng wa lefatše lohle. print("B") Go sa le bjalo, khoele ye kgolo e tšwela pele mola mothaladi wa lefase ka bophara o letile kabo ya methopo. Ge methopo e thoma go hwetšagala, mešomo ye ka bobedi e a phethagatša. Le ge e le gore go gatiša mošomo go ka thoma pejana go feta , re ka se kgonthišetše taelo ka gobane go gatiša ga se tshepedišo ya athomo (motsotso wo ditšweletšwa di tšwelelago ka gare ga khonsule o kgauswi le mafelelo a tshepedišo). "A" "B" : (AB) . Karabo Maswaodikga a laetša gore ditlhaka di ka tšwelela ka tatelano efe goba efe: e ka ba AB goba BA. Mošomo wa 8 print("A") DispatchQueue.main.async { print("B") } DispatchQueue.global().async { print("C") } Mo, re ka kgonthišega fela gore "A" e gatišitšwe pele. Re ka se kgone go bona gabotse ge e ba mošomo wo o lego mothalong o mogolo goba wo o lego mothalong wa lefase ka bophara o tla phethagatša ka lebelo. : A(BC) . Karabo Mošomo wa 9 DispatchQueue.global(qos: .userInteractive).async { print(“A”) } DispatchQueue.main.async { // 1 print(“B”) } le DispatchQueue.global(qos: .userInteractive).async { print(“A”) } print(“B”) // 1 Ka lehlakoreng le leng, maemong a mabeli e bolaoa ka khoele e ka sehloohong. Gape, re ka se kgone go bona gabotse gore mothaladi wa lefase ka bophara o tla abelwa neng methopo, ka fao ka teori, e ka gatišwa gateetee pele e fihla ntlheng yeo e swailwego // 1 godimo ga khoele ye kgolo. Le ge go le bjalo, ka go diragatša, mošomo wa mathomo o fela o gatiša bjalo ka AB, mola wa bobedi o gatiša bjalo ka BA. Se ke ka lebaka la gore tabeng ya mathomo, e phethagatšwa bonyenyane ka poeletšong ye e latelago ya RunLoop ya khoele ye kgolo (goba dipoeletšo tše mmalwa ka morago), mola tabeng ya bobedi, e rulagantšwe go šoma ka poeletšo ya bjale ya RunLoop godimo ga khoele ye kgolo. Le ge go le bjalo, re ka se kgonthišetše taelo yeo. print("B") "A" print("B") print("B") ya mešomo ye ka bobedi: (AB) . Karabo Mošomo wa 10 print("A") DispatchQueue.global().async { print("B") DispatchQueue.global().async { print("C") } print("D") } Go molaleng gore mathomo a ditšweletšwa ke . Ka morago ga go beakanya , re ka se kgone go bona gabotse gore methopo e tla abelwa neng—mošomo wo o ka phethagatša e ka ba pele goba ka morago ga . Se ka dinako tše dingwe se direga le mo tirišong. "AB" print("C") print("D") : AB(CD) . Karabo Mošomo wa 11 let serialQueue = DispatchQueue(label: “com.kirylfamin.serial”, qos: .userInteractive) DispatchQueue.main.async { print(“A”) serialQueue.async { print(“B”) } print(“C”) } Gape, re ka se kgone go bona gabotse gore methopo e tla abelwa neng bakeng sa go gatiša ("B") mothalong wa tlwaelo. Ka go diragatša, ka ge khoele ye kgolo e fiwa bohlokwa bjo bo phagamego, "C" gantši e phrintha pele ga "B", le ge e le gore se ga se kgonthišetšwe. : A(BC) . Karabo Mošomo wa 12 DispatchQueue.global().async { print("A") } print("B") sleep(1) print("C") Mo, go molaleng gore ditšweletšwa e tla ba BAC ka gobane boroko bja motsotswana o tee bo netefatša gore mothaladi wa lefase ka bophara o na le nako ye e lekanego ya go aba methopo. Le ge khoele ye kgolo e thibetšwe ke boroko (yeo o sa swanelago go e dira tšweletšong), e phethagatša go thread ye nngwe. print("A") : BAC Karabo Mošomo wa 13 DispatchQueue.main.async { print("A") } print("B") sleep(1) print("C") Tabeng ena, kaha e enqueued ka mola ka sehloohong, e ka feela phethahatsoa ka khoele e ka sehloohong. Leha ho le joalo, khoele ka sehloohong tsoela pele ho phethahatsa khoutu - hatisa , joale robala, ebe hatisa . Ke feela ka morago ga moo moo RunLoop e ka phethagatšago mošomo wo o beilwego mothalong. print("A") "B" "C" : BCA Karabo Mešomo ya maemo a godimo Ga go bonagale o tla kopana le mathata a dipoledišanong, eupša go a kwešiša go tla go thuša go kwešiša GCD gakaone. sa Counter Sehlopha mo se šomišwa fela go semantiki ya tšhupetšo: final class Counter { var count = 0 } Mošomo wa 14 let counter = Counter() DispatchQueue.global().async { DispatchQueue.main.async { print(counter.count) } for _ in (0..<100) { // 1 counter.count += 1 } } Mo, palo efe goba efe ya magareng ga 0 le 100 e ka gatišwa, go ya ka gore tlhale ye kgolo e swaregile gakaakang. Bjalo ka ge re tseba, re ka se kgone go bolela e sa le pele gabotse gore mošomo wa asynchronous o tla hwetša neng methopo—e ka direga pele, nakong ya goba ka morago ga loop go thread ya mošomi. : 0-100 Karabo Mošomo wa 15 DispatchQueue.global(qos: .userInitiated).async { print(“A”) } DispatchQueue.global(qos: .userInteractive).async { print(“B”) } QoS ga e kgonthišetše gore mothaladi wo o nago le bohlokwa bjo bo phagamego o tla amogela methopo ka lebelo, le ge e le gore iOS e tla leka go dira bjalo. Ka go diragatša, ditšweletšwa mo ke (AB). : (AB) . Karabo Mošomo wa 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”) } Ka ge re sa kgone go tseba gore ke phethagatšo efe yeo e thomago pele, le go ralala le ditiro tše 1000 re ka se kgone go bona gore ke mošomo ofe wo o tlago phethwa ka lebelo. : (AB) . Karabo Mošomo wa 16.2 Ke eng dipholo tsa ho nka tshebetso qala phethahatsa ka nako e le nngwe? Ka ge mothaladi wa .userInteractive o abetšwe methopo ye mentši, ka nako ya ditiro tše 1000 phethagatšo mo mothalong woo e tla dula e fetša ka lebelo. : BA Karabo Mošomo wa 17 Ka go šomiša mokgwa wo o swanago, re ka fetoša mošomo ofe goba ofe ka go se kgonthišege go tšwa karolong ye e fetilego (mohlala, Mošomo wa 12): 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 } } Nomoro efe goba efe ya magareng ga 0 le 100 e ka gatišwa. Taba ya gore 0 e ka gatišwa e tiišetša gore go Mošomo wa 12 re ka se kgonthišetše gore ditšweletšwa tša di tla dula di direga pele ga , ka ge gabotse go se na selo seo se fetogilego—feela gore seloupu se nyaka methopo go se nene go feta go gatiša (hlokomela gore go fo thoma seloupu, gaešita le pele ga phethagatšo ya sona, ge e le gabotse go feleleditše ka go se kgonthišege ka mo go feletšego). "C" "B" : 0-100 Karabo Mošomo wa 18 DispatchQueue.global(qos: .userInitiated).async { print(“A”) } print(“B”) DispatchQueue.global(qos: .userInteractive).async { print(“C”) } Boemo bjo bo swanago bo direga mo. Ka kgopolo, e ka phethagatša ka lebelo go feta (ge o tšea sebaka sa ka selo se sengwe se boima go se nene). Ka go diragatša, ka mehla e gatiša pele. Le ge go le bjalo, taba ya gore re phethagatša pele re enqueuing e oketša kudu kgonagalo ya gore e tla gatišwa pele ga , ka ge nako ye e oketšegilego yeo e dirišitšwego go godimo ga thread ye kgolo gantši e lekane gore mothaladi wa .userInitiated o hwetše methopo le go phethagatša . Le ge go le bjalo, se ga se kgonthišetšwe gomme ka dinako tše dingwe e ka gatiša ka lebelo. Ka go rialo, ka kgopolo go na le go se kgonthišege mo go feletšego; ka go diragatša, e na le tshekamelo ya go ba B (CA). print("A") print("B") print("B") "B" print("B") print("C") "A" "C" print("B") print("A") "C" : (BCA) . Karabo Mošomo wa 19 DispatchQueue.global().sync { print(Thread.current) } go nyalantšha di bolela gore: Ditokomane tša “Bjalo ka go dira gore tshepedišo e šome gabotse, mošomo wo o phethagatša diboloko godimo ga khoele ya bjale neng le neng ge go kgonega, ka ntle le e tee: diboloko tšeo di rometšwego mothalong o mogolo wa go romela ka mehla di šoma godimo ga khoele e kgolo.” Se se ra gore bakeng sa merero ya go dira gore dilo di šome gabotse, dipitšo tša go sepelelana di ka phethagatša go thread ye e swanago yeo di bego di bitšwa go tšwa go yona (ntle le – mešomo yeo e e šomišago e phethagatša ka mehla go thread ye kgolo). Ka go realo, khoele ya bjale (ye kgolo) e a gatišwa. main.sync : khoele e kgolo Karabo Mošomo wa 20 DispatchQueue.global().sync { // 1 print(“A”) DispatchQueue.main.sync { print(“B”) } print(“C”) } Ke fela yeo e gatišitšwego ka gobane go direga go se šome. Ka lebaka la optimization, mosebetsi (labeled 1) qala ho phethahatsa ka khoele ka sehloohong, 'me joale bitsa isang ho deadlock. "A" main.sync : А, go se šome Karabo Mošomo wa 21 DispatchQueue.main.async { print("A") DispatchQueue.global().sync { print("B") } print("C") } Optimization e dira gore mošomo wa o se be enqueued eupša o “spliced” ka gare ga khoele ya phethagatšo ya bjale. Ka go rialo, khoutu: . print("B") DispatchQueue.global().sync { print("B") } e ba yeo e lekanago le: print(“B”) : ABC Karabo Go tšwa mešomong ye, go molaleng gore o swanetše go šomiša main.sync ka kelohloko kudu—feela ge o kgodišegile gore mogala ga se wa dirwa go tšwa go thread ye kgolo. Mafetšo Sehlogong se, re ile ra lebiša tlhokomelo dikgopolong tša motheo tša go diriša ditlhale tše dintši go iOS—ditlhale, mešomo le methaladi—le ditswalano tša tšona. Re ile ra hlahloba ka moo GCD e laolago phethagatšo ya mešomo go ralala le methaladi ye megolo, ya lefase ka bophara, le ya tlwaelo, gomme ra ahlaahla diphapano magareng ga phethagatšo ya tatelano le ya nako e tee. Go tlaleletša, re ile ra hlahloba dipharologantšho tše bohlokwa magareng ga go romela mošomo wa synchronous (sync) le asynchronous (async), ra gatelela ka moo mekgwa ye e amago tatelano le nako ya phethagatšo ya khoutu. Go tseba dikgopolo tše tša motheo gabotse go bohlokwa go aga dikgopelo tše di arabelago, tše di tsepamego le go efoga mereo ye e tlwaelegilego go swana le ditšhitišo. Ke tshepa gore o hweditše selo se sengwe se se holago sehlogong se. Ge e ba selo se sengwe se sa dutše se sa hlaka, ikwe o lokologile go ikgokaganya le nna bakeng sa tlhaloso ya mahala go Telegram: . @kfamyn Dikgokagano tše di lebanego YouTube kanale le ditshwantsho tsohle - https://www.youtube.com/@kirylfamin Khoutu e feletšego ya ditlwaetšo - https://github.com/kfamyn/GCD-Tasks Thelekramo ya ka - http://t.me/kfamyn RunLoop - https://developer.apple.com/ditokomane/motheo/runloop ditokomane tša mokgwa wa - (phethagatša:)-3segw sync https://developer.apple.com/ditokomane/romela/dispatchqueue/sync