Sobes.tech
Junior

iOS-ის განვითარების კონტექსტში GCD (Grand Central Dispatch) რა არის?

sobes.tech AI

პასუხი AI-სგან

GCD (Grand Central Dispatch) — Apple-ის მიერ შექმნილი დაბალ დონეზე API, რომელიც უზრუნველყოფს პარალელური ოპერაციების მართვას და კოდის ასინქრონულ შესრულებას პროგრამებში. იგი უზრუნველყოფს დავალებების გაგზავნას შესრულების რიგებში, რომლებიც სისტემის მიერ კონტროლდება.

ძირითადი მახასიათებლები:

  • დავალებების რიგები (Dispatch Queues): FIFO სტრუქტურები, რომელშიც დამატებულია კოდის ბლოკები (closures) შესრულებისთვის.
    • წარმოიშობა concurrent (პარალელური) და serial (მიმდევრული) ტიპებიდან.
    • გლობალური სისტემური რიგები და მომხმარებლის მიერ შექმნილი.
  • ბლოკები (Blocks): სამუშაო ერთეულები, რომლებიც გადაეცემა რიგებს.
  • მოწესრიგების მართვა: გამჭვირვალეა დეველოპერისთვის, საშუალებას აძლევს სისტემას ოპტიმალურად განაწილოს დავალებები ხელმისაწვდომი პროცესორების ბირთვებზე.
  • პრიორიტეტები: საშუალებას აძლევს განსაზღვროს დავალებების პრიორიტეტი სისტემის გლობალურ concurrent რიგებში.

რიგების ტიპები:

  • Serial (მიმდევრული): ახორციელებს დავალებებს ზუსტად ერთდროულად, დამატების წესით. უზრუნველყოფს, რომ ამ რიგიდან მხოლოდ ერთი დავალება შესრულდება ნებისმიერ დროს.
    • მთავარი რიგი (DispatchQueue.main) — სპეციალური serial რიგი UI განახლებებისთვის.
    • მომხმარებლის მიერ შექმნილი serial რიგები.
  • Concurrent (პარალელური): შეუძლია ერთდროულად შეასრულოს რამდენიმე დავალება, დასრულების წესს არ გარანტირებს.
    • სისტემის გლობალური concurrent რიგები სხვადასხვა ხარისხის მომსახურებით (QoS).
    • მომხმარებლის მიერ შექმნილი concurrent რიგები.

QoS დონეები გლობალურ concurrent რიგებისთვის:

QoS დონე აღწერა გამოყენების მაგალითები
userInteractive დავალებები, რომელთაც აქტიურად ურთიერთქმედებს მომხმარებელი ანიმაციები, UI მოვლენის დამუშავება
userInitiated დავალებები, რომლებიც მომხმარებელმა დაიწყო და საჭიროებს დაუყოვნებლივ შედეგს შინაარსის ჩატვირთვა ღილაკზე დაჭერისას
utility გრძელვადიანი დავალებები, რომლებიც არ საჭიროებენ დაუყოვნებლივ შედეგს მონაცემების ჩატვირთვა, სურათების დამუშავება ფონის რეჟიმში
background დავალებები, რომლებიც ხორციელდება ფონის რეჟიმში, უჩინარი მომხმარებლისთვის ქეშის განახლება, მონაცემების სინქრონიზაცია
unspecified QoS დონე არ არის მითითებული, სისტემა თავად განსაზღვრავს ძველი API ან დაბალ დონეზე სისტემური დავალებები

გამოყენების მაგალითი:

// დავალების შესრულება ფონის ნაკადში (გლობალური concurrent რიგი)
DispatchQueue.global(qos: .userInitiated).async {
    // გრძელვადიანი ოპერაციის შესრულება
    print("ფონის დავალების შესრულება")

    // დაბრუნება მთავარ ნაკადზე UI განახლებისთვის
    DispatchQueue.main.async {
        print("UI განახლება მთავარი ნაკადზე")
    }
}

GCD ამარტივებს მრავალნაჭლიანი და პარალელური მუშაობას, კოდი უფრო წასაკითხი და ნაკლებად მგრძნობიარე ხდება race conditions-ის მიმართ, შედარებით დაბალ დონეზე ნაჭლიანი მართვისგან (მაგ., Thread).