Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ დავალებების მართვის სისტემებში დისპეჩერის ტიპებს შორის განსხვავებები?

sobes.tech AI

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

სამუშაოების მართვის სისტემებში, მაგალითად iOS-ზე GCD (Grand Central Dispatch) გამოყენებით, არსებობს სხვადასხვა ტიპის dispatch-ები, რომლებიც განსაზღვრავენ, როგორ და როდის შესრულდება სამუშაოები:

  • სინქრონული dispatch (sync) — სამუშაო შესრულდება მიმდინარე ნაკადში, და კოდის შესრულება ბლოკდება სამუშაო დასრულებამდე. ეს სასარგებლოა, როდესაც საჭიროა შედეგის მოლოდინი წინსვლისთვის.

  • ასინქრონული dispatch (async) — სამუშაო ჩაწერილია რიგში და შესრულდება ფონურ ნაკადში, მიმდინარე ნაკადი არ ბლოკდება. ეს საშუალებას აძლევს UI-ს არ ბლოკავდეს და სამუშაოები პარალელურად შესრულდეს.

  • სერიული რიგი (serial queue) — სამუშაოები შესრულდება ერთზე ერთ, მკაცრად დამატების წესით. ეს სასარგებლოა რესურსების ერთდროულად წვდომის დაცვაში.

  • კონკურენტული რიგი (concurrent queue) — სამუშაოები შეიძლება ერთდროულად შესრულდეს, რაც ზრდის პროდუქტიულობას მრავალნაჭრიან გარემოში.

Swift-ში GCD-ის გამოყენების მაგალითი:

let serialQueue = DispatchQueue(label: "com.example.serial")
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)

serialQueue.async {
    print("მოვალეობა 1")
}
serialQueue.async {
    print("მოვალეობა 2")
}

concurrentQueue.async {
    print("პარალელური მოვალეობა 1")
}
concurrentQueue.async {
    print("პარალელური მოვალეობა 2")
}

ამიტომ, dispatch-ის ტიპის არჩევანი დამოკიდებულია შესრულების წესზე და იმ საჭიროებაზე, რომ მთავარი ნაკადი არ იყოს ბლოკირებული.