Junior
Многопоточӣ чист?
sobes.tech AI
Ҷавоб аз AI
Многопоточность дар iOS маънои истифодаи чандирӯяҳои (threads) дар дохили як раванди барнома мебошад, ки имкон медиҳад чанд вазифаро ҳамзамон ё псевдосамзамон иҷро кардан, бо мақсади пешгирии бастани сӯзишвории асосии UI ва нигоҳ доштани ҷавобгӯии интерфейс.
Принсипҳо ва компонентҳо:
- Сӯзишворӣ (Thread): Ҳамчун як воҳиди мустақил дар дохили раванди иҷро мешавад. Стек даъватҳо ва маҷмӯи регистратор дорад, аммо мемоиро бо дигар сӯзишворӣҳои ҳамин раванди тақсим мекунад.
- Сӯзишвории асосӣ (Main Thread): Барои навсозии UI ва коркарди ҳодисаҳои корбар масъул аст. Ҳар гуна амали дарозмуддат дар он ба "бастани" барнома оварда мерасонад.
- Сӯзишвории пасзамина (Background Threads): Барои иҷрои вазифаҳои сарборӣ (суръатҳои шабака, ҳисобҳо, коркарди маълумот) истифода мешаванд, бидуни бастани сӯзишвории асосӣ.
- Шартҳои рақобат (Race Condition): Вақте ки ду ё бештар сӯзишворӣ кӯшиш мекунанд, ки ҳамзамон ба маълумоти умумӣ дастрасӣ пайдо кунанд ва онҳоро тағир диҳанд, ки метавонад ба натиҷаҳои номуайян оварда расонад.
- Deadlock (Бастани ногузир): Вақте ки ду ё бештар сӯзишворӣ интизор мешаванд, ки дигаре онҳоро озод кунад, ва дар натиҷа ҳеҷ яке аз онҳо наметавонанд идома диҳанд.
- Асбобҳои iOS барои бисёрсӯзишворӣ:
- GCD (Grand Central Dispatch): API-и пастсуръат, ки ба сатрҳо (dispatch queues) асос ёфтааст. Пулро идора мекунад ва вазифаҳоро байни онҳо тақсим мекунад. Қобилияти дастгирии сатрҳои пайдарпай ва параллелӣ.
- Operation Queues (NSOperationQueue/Operation): Абстраксияи объектӣ дар болоии GCD. Имкон медиҳад, ки вазифаҳоро (
Operation) эҷод ва идора кард, вобастагиҳоро идора кард, дарозмуддат ва бекор кардан. - Локҳо (NSLock, DispatchQueue sync): Механизмҳои ҳамоҳангсозӣ барои дастрасӣ ба захираҳои умумӣ ва пешгирии шартҳои рақобат.
Маслиҳат барои истифодаи GCD:
// Иҷрои вазифа дар сатр дар пасзамина
DispatchQueue.global(qos: .userInitiated).async {
// Амали дарозмуддат (масалан, боргирии маълумот)
// Пас аз анҷом, навсозӣ UI дар сӯзишвории асосӣ
DispatchQueue.main.async {
// Навсозии UI
}
}
Маслиҳат барои истифодаи OperationQueue:
import Foundation
// Эҷоди сатрҳои амалиёт
let operationQueue = OperationQueue()
// Эҷоди амалиёт
let operation = BlockOperation {
// Амали дарозмуддат
print("Амалиёт дар ҷараён аст")
}
// Илова кардани амалиёт ба сатр
operationQueue.addOperation(operation)
// Мумкин аст, вобастагиҳоро байни амалиётҳо илова кард
// let anotherOperation = ...
// operation.addDependency(anotherOperation)
Многосӯзишворӣ барои:
- Ҷавобгӯии UI.
- Беҳтар кардани иҷроиш бо иҷрои параллелӣ.
- Истифодаи муассири захираҳои дастгоҳ.
Маҳз дар иҷрои бисёрсӯзишворӣ бояд бо эҳтиёт муносибат кард, то ки дастрасӣ ба захираҳои умумӣ бо истифода аз механизмҳои ҳамоҳангсозӣ таъмин карда шавад.