Sobes.tech
Middle

Негизги (off main thread) эмес башка жиптер менен иштөө эмне?

sobes.tech AI

AIден жооп

Тиркемелердин негизги агымынан башка агымдар менен иштөө ресурстук же узак мөөнөттүү операцияларды (мисалы, тармактык суроолор, маалыматтарды иштетүү, маалымат базасы менен иштөө) фон режиминде аткарууну камтыйт, бул негизги агымды (UI Thread) блоктобойт. Бул колдонуучу интерфейсинин жоопкерчилигин сактоо үчүн өтө маанилүү.

iOS үчүн көбүнчө колдонулат:

  1. Grand Central Dispatch (GCD): Жогорку өндүрүмдүүлүккө ээ технология, тапшырмаларды параллелдүү жана атаандаштык менен аткаруу үчүн:

    • Артыкчылыктары: Колдонуу жөнөкөй, агымдар пулун автоматтык башкаруу, иштөө ылдамдыгын оптималдаштыруу.
    • Кемчиликтери: Операцияларды жокко чыгарыш кыйынчылыгы, Operation Queues салыштырмалуу аз ийкемдүүлүк.

    GCD колдонуу мисалы:

    // Глобалдык кезекке тапшырма аткаруу (фон агымы)
    DispatchQueue.global(qos: .userInitiated).async {
        // Сиздин кодуңуз, узак мөөнөттүү операцияны аткарат
        print("Фон агымында иштөө")
    
        // Аягында, эгер UI жаңыртуу керек болсо, негизги агымга кайтыңыз
        DispatchQueue.main.async {
            // UI жаңыртуу
            print("Негизги агымда UI жаңыртуу")
        }
    }
    
  2. Operation Queues (NSOperationQueue/Operation): GCD үстүнө объект-ориенттелген каптоо, ал тапшырмаларды башкарууну көбүрөөк ийкемдүү кылат:

    • Артыкчылыктары: Операциялар арасындагы көзкарандылыктарды башкаруу, операцияларды жокко чыгарыш, кайра колдонуу жана токтотуу оңой.
    • Кемчиликтери: Жөнөкөй тапшырмалар үчүн GCD салыштырмалуу татаал синтаксис.

    Мисал:

    // Операциялар кезегин түзүү
    let operationQueue = OperationQueue()
    
    // Операция түзүү (BlockOperation колдонсо болот же өз классыңызды түзүү)
    let myOperation = BlockOperation {
        // Узак мөөнөттүү операцияны аткарган код
        print("Фон операциясында иштөө")
    }
    
    // Операцияны кезекке кошуу
    operationQueue.addOperation(myOperation)
    
  3. Manual Threads (NSThread): Аягында, өзүңүз түзө аласыз жана башкарсаңыз болот:

    • Артыкчылыктары: Толук көзөмөл
    • Кемчиликтери: Жогорку татаалдык, жашоонун циклин, синхрондоштууну жана таймаштарды өзүңүз башкаруу керек, ал көбүнчө сунушталбайт.

    Мисал:

    // Жаңы агымды түзүү жана баштоо
    let myThread = Thread {
        // Код жаңы агымда иштейт
        print("NSThread аркылуу жаңы агымда иштөө")
    }
    myThread.start()
    

Негизги агымдан тышкаркы иштөө артыкчылыктары:

  • UI жоопкерчилиги: UI үзгүлтүксүз жана жооп берүүчү бойдон калат, анткени негизги агым блоктогон эмес.
  • Өндүрүмдүүлүк: Көп ядролук процессорлорду колдонуу менен жалпы аткарууну жогорулатуу мүмкүнчүлүгү.
  • UX жакшыртуу: Колдонуучу узак мөөнөттүү операциялар учурунда "талаа" көрүнүшүн көрбөйт.

Маанилүү учурлар:

  • UI жаңыртуу: Бардык UI элементтерин жаңыртуу тек гана негизги (UI) агымда жүргүзүлүшү керек. Фон агымдан UI жаңыртуу күтүүсүз жүрүм-турумга жана колдонмонун кулашына алып келиши мүмкүн.
  • Синхрондоштуруу: Бир нече агымдар менен жалпы ресурстарды (өзгөрмөлөр, объекттер) иштеткенде, синхрондоштуруу механизмдерин (семафорлор, блокировкалар, бэрьердик кезектер) колдонуу керек, таймаш шарттарынан сактануу үчүн.
  • Жокко чыгарыш: Узун мөөнөттүү фондук тапшырмаларда алардын жокко чыгарышын камсыздоо маанилүү, мисалы, колдонуучу экрандан чыгып кетсе. Operation Queues встроенный жокко чыгарыш механизмин камсыздайт. GCD үчүн бул кыйын болушу мүмкүн.

GCD жана Operation Queues арасындагы тандоо тапшырманын өзгөчөлүгүнө көз каранды. Жөнөкөй фондук операциялар үчүн GCD жетиштүү болушу мүмкүн. Көчмө сценарийлер жана жокко чыгарыш керек болсо, Operation Queues артыкчылыкка ээ. NSThread азыркы заманбап иштеп чыгууда сейрек колдонулат.