By using this site, you agree to the Privacy Policy and Terms of Use.
موافق
عرب فلاترعرب فلاتر
  • Dart
  • Widgets
  • Packages
  • Tutorials
  • Flutter Roadmap
  • تثبيت Dart
  • تثبيت Flutter
قراءة: شرح العوازل في لغة دارت (Isolates in Dart)
شارك
تسجيل الدخول
إشعار أظهر المزيد
Aa
عرب فلاترعرب فلاتر
Aa
  • Dart
  • Widgets
  • Packages
  • Tutorials
  • Flutter Roadmap
  • تثبيت Dart
  • تثبيت Flutter
Search

أقسام الموقع

استكشف جميع أقسام الموقع
قسم Dart في موقع عرب فلاتر

Dart

59 مقالات
قسم Widgets في موقع عرب فلاتر

Widgets

104 مقالات
قسم Packages في موقع عرب فلاتر

Packages

19 مقالات
قسم Tutorials في موقع عرب فلاتر

Tutorials

22 مقالات

أخر المواضيع

استكشف أخر المواضيع المنشورة
شرح الـ Event Loop في Flutter وجعل التطبيق لا يتوقف أبدًا
Tutorials

شرح الـ Event Loop في Flutter وجعل التطبيق لا يتوقف أبدًا

5
حل مشكلة التوافق بين Java و Kotlin و Gradle في فلاتر
Tutorials

حل مشكلة التوافق بين Java و Kotlin و Gradle في فلاتر

10
أفضل الـ Packages في Flutter لتسريع تطوير التطبيقات
Tutorials

أفضل الـ Packages في Flutter لتسريع تطوير التطبيقات

17
لديك حساب موجود؟ تسجيل الدخول
  • Dart
  • Widgets
  • Packages
  • Tutorials
  • Flutter Roadmap
  • تثبيت Dart
  • تثبيت Flutter
© جميع الحقوق محفوظة موقع عرب فلاتر 2023
عرب فلاتر > Dart > شرح العوازل في لغة دارت (Isolates in Dart)
Dart

شرح العوازل في لغة دارت (Isolates in Dart)

عبدالله يوسف
أخر تحديث 2024/11/15
بواسطة عبدالله يوسف اضف تعليق 8 دقيقة للقراءة 1104 مشاهدات 8
شارك
شرح العوازل في لغة دارت (Isolates in Dart)
شرح العوازل في لغة دارت (Isolates in Dart)
شارك

خدماتنا البرمجية – عرب فلاتر🚀

خدماتنا البرمجية – عرب فلاتر

العوازل في لغة دارت، يتم تشغيل جميع التعليمات البرمجية في سياق عزل يسمى Isolate. هذه العوازل توفر بيئة مستقلة لتشغيل الأكواد بدون مشاركة الحالة مع العوازل الأخرى. على عكس لغات البرمجة الأخرى التي تعتمد على “الخيوط” (threads) التي تشارك الذاكرة، توفر Dart عوازل تتيح عملية التنفيذ المتوازي بدون تعارضات في الذاكرة. يتم التواصل بين العوازل عن طريق الرسائل، مما يضمن أن كل عزل لديه ذاكرته الخاصة ولا يشارك البيانات مباشرة مع العوازل الأخرى.

المحتويات
ما هي العوازل في لغة Dart؟كيفية إنشاء واستخدام العوازل في لغة دارت؟مثال يوضح أهمية استخدام العوازل في لغة دارتمثال بدون استخدام العوازل في لغة دارت (Isolates)مثال باستخدام العوازل في لغة دارت (Isolates)الفرق بين الحالتين:الفرق بين Isolates و Multithreadingاستخدام العوازل بالتوازي في التطبيقاتمزايا استخدام العوازل في لغة دارت:متى يجب استخدام العوازل في لغة دارت؟

ما هي العوازل في لغة Dart؟

في لغة Dart، كل تطبيق يتم تشغيله داخل عزل رئيسي يسمى main isolate. إذا كنت بحاجة إلى تنفيذ عمليات مكثفة دون تعطيل واجهة المستخدم، يمكنك إنشاء Isolate جديد لتنفيذ هذه العمليات في بيئة معزولة. على سبيل المثال، عند التعامل مع عمليات حسابية كبيرة أو عمليات إدخال/إخراج كثيفة، يمكن استخدام العوازل لتجنب تجميد التطبيق.

“اقرأ أيضاً: شرح استخدام ويدجت FittedBox في فلاتر“


كيفية إنشاء واستخدام العوازل في لغة دارت؟

لإنشاء Isolate جديد في Dart، نستخدم الدالة Isolate.spawn التي تنشئ وتبدأ تشغيل Isolate جديد. يتم تمرير دالة تنفيذ ورسالة أولية إلى العازل الجديد.

مثال بسيط لإنشاء Isolate جديد:

import 'dart:isolate';

// دالة لتنفيذ العمليات داخل العزل
void heavyComputation(SendPort sendPort) {
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  sendPort.send(result); // إرسال النتيجة إلى العازل الرئيسي
}

void main() async {
  ReceivePort receivePort = ReceivePort(); // إنشاء منفذ لتلقي الرسائل

  // تشغيل عازل جديد
  await Isolate.spawn(heavyComputation, receivePort.sendPort);

  // انتظار الرسالة من العازل
  receivePort.listen((data) {
    print("Result from Isolate: $data");
    receivePort.close(); // إغلاق المنفذ بعد الانتهاء
  });
}

الناتج:

Result from Isolate: 499999999500000000

في هذا المثال، تم إنشاء Isolate جديد لتنفيذ عملية حسابية ثقيلة جدا (إجمالي الأرقام من 0 إلى 1 مليار) . يتم إرسال النتيجة من العازل الجديد إلى العازل الرئيسي عبر SendPort وReceivePort.

“اقرأ أيضاً: شرح استخدام ويدجت SwitchListTile في فلاتر“


مثال يوضح أهمية استخدام العوازل في لغة دارت

لنقم بكتابة مثال يوضح تأثير استخدام العوازل في لغة دارت مقابل عدم استخدامها عند تنفيذ عملية حسابية ثقيلة. سنرى كيف يؤدي استخدام العوازل إلى تحسين استجابة التطبيق وعدم تجميد واجهة المستخدم.

مثال بدون استخدام العوازل في لغة دارت (Isolates)

import 'dart:async';

void heavyComputation() {
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  print("Result: $result");
}

void main() {
  print("Starting heavy computation...");

  // تنفيذ الحساب مباشرةً في العازل الرئيسي
  heavyComputation();

  // هذا السطر سيتم تنفيذه بعد انتهاء العملية الحسابية
  print("Finished heavy computation");
}

الشرح:

  • في هذا المثال، يتم تنفيذ عملية حسابية ثقيلة في العازل الرئيسي (main isolate)، وهذا يعني أن كل المهام الأخرى بما فيها طباعة “Finished heavy computation” ستنتظر حتى تنتهي عملية الحساب.
  • إذا كان هناك واجهة مستخدم في التطبيق، فإنها ستتوقف عن الاستجابة حتى تنتهي العملية.

الناتج بدون استخدام العوازل:

Starting heavy computation...
Result: 499999999500000000
Finished heavy computation

كما نلاحظ، لا يتم طباعة “Finished heavy computation” إلا بعد انتهاء العملية الحسابية، مما يعني أن واجهة المستخدم ستكون مجمدة خلال هذه الفترة.

“اقرأ أيضاً: شرح تبديل الحالة في دارت (Switch Case In Dart)“

مثال باستخدام العوازل في لغة دارت (Isolates)

import 'dart:isolate';

// دالة تنفيذ داخل العازل
void heavyComputation(SendPort sendPort) {
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  sendPort.send(result); // إرسال النتيجة إلى العازل الرئيسي
}

void main() async {
  print("Starting heavy computation...");

  ReceivePort receivePort = ReceivePort(); // إنشاء منفذ لتلقي الرسائل

  // تشغيل العازل الجديد
  await Isolate.spawn(heavyComputation, receivePort.sendPort);

  // انتظار الرسالة من العازل
  receivePort.listen((data) {
    print("Result from Isolate: $data");
    print("Finished heavy computation");
    receivePort.close(); // إغلاق المنفذ بعد استلام الرسالة
  });

  // يمكن طباعة الرسائل أو تنفيذ العمليات الأخرى هنا بدون تجميد
  print("Main isolate continues working...");
}

الشرح:

  • في هذا المثال، يتم نقل عملية الحساب الثقيلة إلى عازل مستقل باستخدام Isolate.spawn.
  • يتم إرسال النتيجة النهائية للعازل الرئيسي عبر الرسائل باستخدام SendPort و ReceivePort.
  • العازل الرئيسي يواصل العمل ويستطيع طباعة “Main isolate continues working…” دون الانتظار حتى تنتهي العملية الحسابية.

الناتج باستخدام العوازل:

Starting heavy computation...
Main isolate continues working...
Result from Isolate: 499999999500000000
Finished heavy computation

كما نلاحظ، يتم طباعة “Main isolate continues working…” فوراً، مما يدل على أن العازل الرئيسي لا يتوقف عن العمل أثناء تنفيذ العملية الحسابية في العازل المستقل.

الفرق بين الحالتين:

  • بدون العوازل: التطبيق يتوقف عن العمل مؤقتًا حتى تنتهي العملية الحسابية، مما يسبب تجميد واجهة المستخدم.
  • باستخدام العوازل: التطبيق يستمر في العمل بشكل طبيعي، حتى مع تنفيذ العملية الحسابية الثقيلة في الخلفية، مما يحافظ على استجابة واجهة المستخدم.

هذا المثال يوضح أهمية العوازل في تحسين أداء التطبيقات التي تحتاج إلى تنفيذ مهام ثقيلة دون التأثير على تجربة المستخدم.

“اقرأ أيضاً: شرح استخدام ويدجت AnimatedList في فلاتر“


الفرق بين Isolates و Multithreading

في اللغات الأخرى مثل Java أو Python، يتم استخدام “الخيوط” (Threads) لتنفيذ العمليات المتعددة في نفس الوقت. ومع ذلك، هذه الخيوط تشارك نفس الذاكرة، مما يؤدي إلى احتمالية حدوث مشاكل تنافسية (race conditions) أو تعارضات في الوصول إلى الذاكرة. في Dart، تم تصميم العوازل لتجنب هذه المشاكل عن طريق فصل كل Isolate في ذاكرته الخاصة.

“اقرأ أيضاً: شرح استخدام ويدجت ShaderMask في فلاتر“


استخدام العوازل بالتوازي في التطبيقات

أحد أهم استخدامات العوازل في لغة دارت هو تحسين الأداء في التطبيقات التي تتطلب عمليات حسابية ثقيلة أو عمليات إدخال/إخراج (I/O) مكثفة. من خلال نقل هذه العمليات إلى عوازل منفصلة، يمكنك التأكد من أن واجهة المستخدم الرئيسية ستظل سلسة ولا تتأثر بتلك العمليات.

مثال آخر: تحميل البيانات بشكل متوازي

import 'dart:isolate';

// دالة لتحميل البيانات داخل عازل جديد
void fetchData(SendPort sendPort) {
  // محاكاة تحميل البيانات
  String data = "Data from isolate";
  sendPort.send(data);
}

void main() async {
  ReceivePort receivePort = ReceivePort();

  // تشغيل العازل الجديد
  await Isolate.spawn(fetchData, receivePort.sendPort);

  // انتظار البيانات
  receivePort.listen((data) {
    print("Received: $data");
    receivePort.close();
  });
}

الناتج:

Received: Data from isolate


مزايا استخدام العوازل في لغة دارت:

  1. عدم المشاركة في الذاكرة: كل Isolate لديه ذاكرته الخاصة، مما يعني عدم وجود مشاكل التزامن أو التعارضات في الذاكرة.
  2. التواصل عبر الرسائل: يتم التواصل بين العوازل عبر الرسائل فقط، مما يسهل إدارتها.
  3. الأمان: يعزز العازل الأمان نظرًا لعدم وجود مشاركة مباشرة للبيانات بين العوازل.

“اقرأ أيضاً: شرح استخدام ويدجت CircleAvatar في فلاتر“


متى يجب استخدام العوازل في لغة دارت؟

يمكن استخدام العوازل في لغة دارت في السيناريوهات التالية:

  • عمليات الحوسبة المكثفة: مثل معالجة الصور أو الحسابات العلمية.
  • عمليات الإدخال/الإخراج الطويلة: مثل تحميل البيانات من الإنترنت أو قراءة الملفات الكبيرة.
  • تحسين الأداء في التطبيقات الكبيرة: تجنب تجميد واجهة المستخدم عن طريق توزيع العمل على عوازل مختلفة.

“اقرأ أيضاً: شرح الـ Asynchronous في لغة دارت (Dart)“


توفر العوازل في لغة دارت طريقة قوية لتنفيذ العمليات بشكل متوازي بدون القلق من مشاكل التزامن أو تعارضات الذاكرة. عن طريق فصل العمليات في عوازل مختلفة والتواصل عبر الرسائل، يمكن تحسين أداء التطبيقات بشكل كبير، خاصة تلك التي تحتوي على عمليات ثقيلة أو طويلة الأمد.

Arab Flutter Community 🚀

انضم إلى مجتمع Arab Flutter
شارك هذا المقال
فيسبوك تويتر Whatsapp Whatsapp لينكد ان تلغرام نسخ الرابط
المقال السابق شرح الـ Stream في لغة دارت (Stream in Dart) الدرس 57: شرح الـ Stream في لغة دارت (Stream in Dart)
Avatar of عبدالله يوسف
بواسطة عبدالله يوسف Founder and CEO at ArabFlutter
تابع:
أنا عبدالله يوسف، مهندس مصري ومؤسس موقع عرب فلاتر، ملهم بشغف التكنولوجيا والإبداع. كمصمم مواقع ومبرمج تطبيقات موبايل باستخدام Flutter، أستمتع بخلق عوالم رقمية فريدة ومبتكرة. تتجلى مواهبي في تصميم وتطوير واجهات مستخدم تفاعلية، حيث يمزج الجانب الجمالي بالدقة الهندسية. ما يميزني هو إلمامي الواسع بتقنيات البرمجة والتصميم، ومقدرتي على تطوير تطبيقات متنوعة عبر منصات مختلفة. أعتبر نفسي مبدعًا وملتزمًا، حيث أسعى دائمًا لتحقيق تحسين مستمر في مهاراتي وتقنياتي. أستمتع بتحديات العمل الجماعي وأؤمن بأهمية الابتكار والتطور. بفضل إبداعي والتزامي، أسعى لتقديم حلول فعّالة تلبي توقعات العملاء وتفوق عن المألوف.
اترك تعليقا اترك تعليقا

اترك تعليقاً إلغاء الرد

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

شرح الـ Event Loop في Flutter وجعل التطبيق لا يتوقف أبدًا
شرح الـ Event Loop في Flutter وجعل التطبيق لا يتوقف أبدًا
Tutorials
حل مشكلة التوافق بين Java و Kotlin و Gradle في فلاتر
حل مشكلة التوافق بين Java و Kotlin و Gradle في فلاتر
Tutorials
أفضل الـ Packages في Flutter لتسريع تطوير التطبيقات
أفضل الـ Packages في Flutter لتسريع تطوير التطبيقات
Tutorials
طريقة انشاء المجلدات باستخدام Dart
طريقة انشاء المجلدات باستخدام كود Dart تلقائيًا
Tutorials

مقالات ذات الصلة

اطلع على المزيد من المقالات المتعلقة بهذا الموضوع!
شرح الـ Stream في لغة دارت (Stream in Dart)
Dart

الدرس 57: شرح الـ Stream في لغة دارت (Stream in Dart)

8
شرح عبارات async & await في لغة دارت (Dart)
Dart

الدرس 56: شرح عبارات async & await في لغة دارت (Dart)

6
شرح مفهوم الـ Future في لغة دارت (Future In Dart)
Dart

الدرس 55: شرح مفهوم الـ Future في لغة دارت (Future In Dart)

6
شرح مفهوم الـ Asynchronous في لغة دارت (Dart)
Dart

الدرس 54: شرح مفهوم الـ Asynchronous في لغة دارت (Dart)

5
10 تمارين محلولة على Null Safety في لغة دارت Dart
Dart

الدرس 53: 10 تمارين محلولة على Null Safety في لغة دارت Dart

5
شرح كلمة Late في لغة دارت (Late in Dart)
Dart

الدرس 52: شرح كلمة Late في لغة دارت (Late in Dart)

8
أظهر المزيد
شعار موقع عرب فلاتر شعار موقع عرب فلاتر

About US

Quick Links

  • خدماتنا
  • من نحن
  • اتصل بنا
  • اتفاقية استخدام
  • سياسة الخصوصية
© جميع الحقوق محفوظة موقع عرب فلاتر 2023
  • Dart
  • Widgets
  • Packages
  • Tutorials
  • Flutter Roadmap
  • تثبيت Dart
  • تثبيت Flutter
adbanner
تم اكتشاف مانع إعلانات
مرحبًا، يرجى إيقاف مانع الإعلانات. الإعلانات تُساهم في دعم موقعنا وتغطية جزء من تكاليف الاستضافة وتطوير المحتوى. شكرًا لتفهمك ودعمك.
Okay, I'll Whitelist
Welcome Back!

Sign in to your account

هل نسيت كلمة المرور؟