Чӣ гуна ду сӯзишвориро дар Dart дар контексти Flutter эҷод кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Дарти/Флаттерда мустақил иҷрои ҷараёнҳоро (Isolates) истифода мебаранд. Онҳо вазифаҳои алоҳида бо ҷойи хотираи худ доранд, ки мушкилоти дастрасии рақобатпазир ба маълумот ва бастани ҷараёни асосӣ (UI)-ро пешгирӣ мекунад.
Барои сохтани ва муошират бо isolates чанд роҳ мавҷуд аст:
-
Isolate.spawn(): роҳи пасттарин барои сохтани isolate. Он талаб мекунад, ки функсияи сатҳи боло ё усули статикӣ барои иҷро дар isolate нав ва порт барои мубодилаи паёмҳо дода шавад.import 'dart:isolate'; // Функсия, ки дар isolate иҷро мешавад void isolateEntry(SendPort sendPort) { // Як амали дарозро иҷро мекунем int result = 0; for (int i = 0; i < 1000000000; i++) { result += i; } // Натиҷаро ба isolate асосӣ мефиристем sendPort.send(result); } void main() async { ReceivePort receivePort = ReceivePort(); // Созишномаи isolate нав Isolate isolate = await Isolate.spawn(isolateEntry, receivePort.sendPort); // Гӯш кардани паёмҳо аз isolate receivePort.listen((message) { print('Натиҷа аз isolate: $message'); // Идома додан ба isolate пас аз гирифтани паём isolate.kill(); }); print('Ҷараёни асосӣ идома дорад...'); } -
compute(): функсияи соддашуда аз бастаиflutter/foundation, киIsolate.spawn()-ро дар пасзамина истифода мебарад. Барои вазифаҳои оддӣ дар пасзамина, ки ниёз ба муоширати мураккаб бо isolate надоранд, комил аст.import 'package:flutter/foundation.dart'; // Функсия, ки бо истифодаи compute иҷро мешавад int heavyComputation(int limit) { int result = 0; for (int i = 0; i < limit; i++) { result += i; } return result; } void main() async { print('Ҳамонро дар пасзамина оғоз мекунем...'); // Иҷрои функсия дар isolate ҷудогона int result = await compute(heavyComputation, 1000000000); print('Натиҷаи ҳисобҳо: $result'); print('Ҷараёни асосӣ пас аз ҳисобҳо идома дорад.'); } -
Isolate.spawnUri(): Барои оғоз кардани коди аз файли ҷудогонаиdartдар isolate нав истифода мешавад.
Муошират байни isolates:
Изолятҳо маълумотро танҳо тавассути паёмҳо тавассути нусхаҳои SendPort ва ReceivePort мубодила мекунанд. Ин амалиётҳо атомӣ мебошанд ва ниёз ба бастан ё механизмҳои дигар барои ҳамоҳангсозӣ надоранд.
SendPort: барои фиристодани паёмҳо аз як isolate ба дигар истифода мешавад.ReceivePort: барои гӯш кардани паёмҳои дохилӣ истифода мешавад.
Ҳангоми интиқоли объектҳо байни isolates, онҳо бояд "таслимшаванда" (transferable) бошанд, ки инҳоро дар бар мегирад:
- Типҳои соддаи маълумот (int, double, String, bool)
- Листҳо ва харитҳо, ки дар онҳо типҳои таслимшаванда ҳастанд
- Нақшҳои махсуси Flutter, ки метавонанд сериализатсия шаванд
Объектҳое, ки таслимшаванда нестанд, нусхабардорӣ мешаванд ва тағиротҳои минбаъда дар яке аз isolates ба дигар таъсир намерасонанд.
Мавзӯъҳои асосӣ:
- isolates наметавонанд мустақиман ба хотираи якдигар дастрасӣ дошта бошанд.
- Онҳо ба ҳолати умумӣ, аз ҷумла тағйирёбандаҳо, синфҳо ва widget-ҳои isolate асосӣ (UI) дастрасӣ надоранд.
- Муошират байни isolates ба таври асинхрон сурат мегирад.
- Дар Flutter, муҳим аст, ки ҳаёти isolates-ро дуруст идора кунед (масалан, бо истифода аз
isolate.kill()агар лозим бошад).
Истифодаи isolates имкон медиҳад, ки амалиётҳои дарозмуддат ё сарватманд дар пасзамина иҷро шаванд, ки ба қатъ шудани интерфейси корбар пешгирӣ мекунад ва кори барнома ба таври ҳамвор таъмин мешавад.