Middle+
Barjer operatsiyasini boshlash bilan parallel navbatda nima bo'ladi?
sobes.tech AI
AIdan javob
Paralel navbat vaqtinchalik ketma-ket navbaga aylantiriladi. Barrierdan oldin bajarilayotgan vazifalar tugaydi, so'ng faqat barrier vazifasi bajariladi. Yangi vazifalar ishga tushirilmaydi barrier vazifasi tugaguniga qadar. Barrier vazifasi tugagach, navbat qolgan vazifalar uchun parallel bajarilishga qaytadi.
async/await bilan actor asosidagi barrier misoli:
actor SharedDataManager {
private var data: [String] = ["Initial"]
func addData(_ item: String) { // O'zgartiruvchi metod - barrier
data.append(item)
print("Qo'shildi \(item). Joriy ma'lumotlar: \(data)")
}
func processData(completion: @escaping ([String]) -> Void) { // O'zgartirmasdan
// Barrier talab qilinmaydi, boshqa o'zgartirmasdan vazifalar bilan parallel bajarilishi mumkin
DispatchQueue.global().async {
// Intensiv ishlov berish...
let result = self.data.map { $0.uppercased() }
completion(result)
}
}
func getData() -> [String] { // O'zgartirmasdan metod - barrier emas
return data
}
}
Grand Central Dispatch (GCD) bilan barrier misoli:
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
func performTasks() {
concurrentQueue.async {
print("Vazifa 1 boshlandi")
Thread.sleep(forTimeInterval: 1) // Ishni simulyatsiya qilish
print("Vazifa 1 tugadi")
}
concurrentQueue.async {
print("Vazifa 2 boshlandi")
Thread.sleep(forTimeInterval: 1)
print("Vazifa 2 tugadi")
}
// Barrier vazifa
concurrentQueue.async(flags: .barrier) {
print("Barrier vazifa boshlandi")
Thread.sleep(forTimeInterval: 2) // Ekskluziv kirishni talab qiladigan ish
print("Barrier vazifa tugadi")
}
concurrentQueue.async {
print("Vazifa 3 boshlandi")
Thread.sleep(forTimeInterval: 1)
print("Vazifa 3 tugadi")
}
concurrentQueue.async {
print("Vazifa 4 boshlandi")
Thread.sleep(forTimeInterval: 1)
print("Vazifa 4 tugadi")
}
}
// Natija shuni ko'rsatadiki, Vazifa 3 va Vazifa 4 faqat Barrier vazifa tugagandan so'ng boshlanadi.