Sobes.tech
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.
  • Беҳтар кардани иҷроиш бо иҷрои параллелӣ.
  • Истифодаи муассири захираҳои дастгоҳ.

Маҳз дар иҷрои бисёрсӯзишворӣ бояд бо эҳтиёт муносибат кард, то ки дастрасӣ ба захираҳои умумӣ бо истифода аз механизмҳои ҳамоҳангсозӣ таъмин карда шавад.