Sobes.tech
Senior

Чӣ гуна дониши шумо дар бораи ҷараёнҳо дар Embedder?

sobes.tech AI

Ҷавоб аз AI

Embedder дар Flutter ҷавобгӯ барои пешниҳоди хидматҳои махсуси платформа ва ҳамгироӣ бо ОС мебошад. Вай роҳбарии ҷараёнҳоро, ки барои кори муҳаррики Flutter ва барномаҳо заруранд, мекунад:

  • UI Thread: Ҷараёни асосӣ, ки дар он коди барномаи шумо иҷро мешавад, UI кашида мешавад ва ҳодисаҳои ғамхорӣ коркард мешаванд. Он барои ҷавобгӯии барнома критикӣ аст. Блок кардани ин ҷараён ба "замрӯд" ва коҳишёбии FPS оварда мерасонад.
  • GPU Thread: Ответ медиҳад барои интиқоли дастурҳо барои рендеринг ба коркарди графикӣ.
  • IO Thread: Барои иҷрои амалиётҳои гаронбаҳо дар воридот/баромад, мисли кор бо файлҳо, шабака, базаи додаҳо, истифода мешавад, то ки UI Thread блок накунад.
  • Platform Thread: Ҷараёнест, ки дар он даъватҳо ба APIҳои нативии платформа (масалан Android Activity ё iOS ViewController) иҷро мешаванд.

Embedder кафолат медиҳад, ки ин ҷараёнҳо сохта шудаанд ва дуруст ҳамкорӣ мекунанд, то кори барнома ба таври ҳамвор ва самаранок анҷом дода шавад. Инженери Flutter ва рамка қисми зиёди корро дар тақсимоти вазифаҳо байни ҷараёнҳо иҷро мекунанд, аммо таҳиягар бояд ба амалиётҳои блоккунанда, ки метавонанд тасодуфан ба UI Thread дохил шаванд, бодиққат бошад. Барои амалиётҳои асинхронӣ ва кор бо ҷараёнҳои дигар истифода мешаванд async/await, Isolate (барои ҳисобҳои воқеан параллелӣ), ва каналҳои платформа.

Истифодаи Isolate барои кор дар пасзамана:

// Функсия, ки дар Isolate ҷудошуда иҷро мешавад
void heavyComputation(SendPort sendPort) {
  // Ҳисобҳои гаронбаҳоро иҷро мекунем
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  // Натиҷаро баргардонед
  sendPort.send(result);
}

// Сохтани ва оғоз кардани Isolate нав
void runHeavyTask() async {
  ReceivePort receivePort = ReceivePort();
  Isolate isolate = await Isolate.spawn(heavyComputation, receivePort.sendPort);

  // Гӯш кардани паёмҳо аз Isolate
  receivePort.listen((message) {
    print('Натиҷаи ҳисобҳо: $message');
    isolate.kill(); // Идома додан ба Isolate пас аз гирифтани натиҷа
  });
}

Фарқият байни async/await ва Isolate:

Функсия async/await Isolate
Параллелизм Конкурентӣ дар як ҷараён Параллелизм воқеӣ дар ядраҳои гуногун
Воридот-баромад Нозир (аз тариқи Future) Манзилӣ (аз тариқи портҳо SendPort/ReceivePort)
Идоракунии Бе изоляцияи хотира Идоракунии пурра дар хотира
Беҳтарин барои Иҷрои ғайриблоккунанда, вазифаҳои кӯтоҳ Вазифаҳои дарозмуддат ва вазнин

Знание о этих потоках и принципах их работы критически важно для написания производительных Flutter-приложений.