Sobes.tech
Middle

რა არის Grand Central Dispatch და როგორ გამოიყენება iOS განვითარების პროცესში?

sobes.tech AI

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

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

GCD-ის ძირითადი კონცეფციები:

  • Dispatch Queues: რიგები, რომელშიც განთავსებულია კოდის ბლოკები (დავალებები) შესრულებისთვის.
    • Serial Queues: ახორციელებენ ბლოკებს მიმდევრობით, ერთდროულად.
    • Concurrent Queues: ახორციელებენ ბლოკებს პარალელურად, მაგრამ მიმდევრობით დამატების წესით.
  • Tasks (Blocks): სამუშაო ერთეულები, რომლებიც იგზავნება Dispatch რიგებში.
  • Dispatch Sources: სისტემური მოვლენების მონიტორინგი (ფაილები, სოკეტები, სიგნალები), რომლებიც იწვევს ბლოკების შესრულებას მათ წარმოქმნის დროს.

გამოყენება:

  1. ფონის ოპერაციების შესრულება: მონაცემების ჩამოტვირთვა ქსელიდან, სურათების დამუშავება, რთული გამოთვლები, რათა მთავარი ნაკადი (UI) არ დაბლოკოს.

    DispatchQueue.global(qos: .userInitiated).async {
        // რესურს-ძალიან დატვირთული ოპერაციის შესრულება
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // UI განახლება მთავარ ნაკადზე
            updateUI(with: processedData)
        }
    }
    
  2. დავალებების დაგეგმვა: გადადებული შესრულება ან პერიოდული შესრულება.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // ეს კოდი შესრულდება 2 წამში
        print("გადადებული შესრულება")
    }
    
  3. მონაცემთა წვდომის სინქრონიზაცია: გამოყენება სერიული რიგებისა ან DispatchQueue.concurrentPerform კონტროლისთვის პარალელური წვდომის.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // .barrier-ის გამოყენება ექსკლუზიური წვდომისთვის
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // სინქრონული წაკითხვა
            for item in sharedArray {
                print(item)
            }
        }
    }
    

უპირატესობები POSIX თხილოვანთან შედარებით:

  • მარტივი გამოყენება: უფრო მაღალი დონის აბსტრაქცია.
  • ეფექტიანობა: GCD უფრო ეფექტურად მართავს სისტემის თხილოვან პულს, ხარჯებს ამცირებს.
  • მასშტაბურობა: ავტომატურად ადაპტირებს პროცესორის ბირთვების რაოდენობას.

QoS ტიპები (საწესის ხარისხი): განსაზღვრავს GCD-ის გეგმავლისთვის დავალების პრიორიტეტს.

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