Sobes.tech
Middle

რა ტიპის რიგებია გამოყენებული main და global-ში?

sobes.tech AI

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

Main queue - ეს არის სერიული რიგი (serial queue), რომელიც მუშაობს აპლიკაციის მთავარი ნაკადში (main thread). იგი გამოიყენება მომხმარებლის ინტერფეისის განახლებისთვის და UI-ღონისძიებების დამუშავებისთვის. ყველა დავალება, რომელიც გადაეცემა main queue-ს, შესრულდება მკაცრად სერიულად.

Global queues - ეს არის პარალელური რიგები (concurrent queues), რომლებიც სისტემამ უზრუნველყოფს. ისინი გამოიყენება ფონურ დავალებებზე, რომლებიც არ უკავშირდება UI-ს, რაც ხელს უშლის main thread-ის დაბლოკვას. არსებობს რამდენიმე გლობალური რიგი სხვადასხვა მომსახურების ხარისხის (Quality of Service, QoS) პრიორიტეტით.

აქ არის ძირითადი ტიპების სია QoS პრიორიტეტით:

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

მაგალითი დავალების გაგზავნა main და global რიგებში:

DispatchQueue.main.async {
    // UI განახლების კოდი
}

DispatchQueue.global(qos: .userInitiated).async {
    // ფონური დავალების შესრულების კოდი მაღალი პრიორიტეტით
    // შესრულების შემდეგ, შესაძლებელია დაბრუნება main queue-ზე UI-ის განახლებისთვის
    DispatchQueue.main.async {
        // UI-ის განახლება ფონური დავალების დასრულების შემდეგ
    }
}