مضى على الشبكة و يوم من العطاء.

البرمجة المتزامنة و غير المتزامنة (Synchronous and Asynchronous Programming)

shadowshadow is verified member.

{ | مشرف قسم لغات البرمجة | }
.:: طاقم المشرفين ::.
.:: كاتب تقني ::.

السمعة:

بسم الله الرحمن الرحيم

في البداية يمكن تتساءل شو معنى تزامن ؟

التزامن يعني التوافق أو التوازن في التوقيت أو الشَّيئان اتَّفقا في الزَّمن ، وفي سياق البرمجة تُستخدم لوصف العمليات التي تحدث بترتيب متتالي ومتناسق.


في البرمجة، العمليات التزامنية تحدث بتسلسل محدد، حيث تبدأ العملية الثانية بعد انتهاء العملية الأولى وهكذا، وتكون تنفيذ العمليات متقاربة في الوقت.
طيب وهيك شرحنا المفهوم الأساسي، الآن كبرمجة عندنا نوعين وهما :


البرمجة المتزامنة (Synchronous Programming) :
  • في البرمجة المتزامنة، العمليات تنفذ بتسلسل معين وتتوقف عندما تتوقف عملية معينة عن الإنتظار.
  • تُستخدم العمليات المتزامنة عادةً في البرامج التي تتطلب تنفيذ الخطوات بترتيب محدد، مثل البرامج الخطية أو التي تتعامل مع الإدخال/الإخراج بشكل متتالي.
  • يمكن أن تؤدي العمليات المتزامنة إلى تأخير في التنفيذ إذا كان هناك انتظار لإكمال العمليات السابقة قبل بدء العمليات التالية.

يعني بشكل مختصر بقوم بمهمة وبنتظر لحتى تنتهي بعدها بروح على المهمة الي بعدها بشكل متسلسل ومتوازي .

البرمجة الغير متزامنة (Asynchronous Programming) :
  • في البرمجة غير المتزامنة، العمليات تنفذ مستقلة بمعنى أن البرنامج لا ينتظر اكتمال العملية الحالية قبل بدء العملية التالية.
  • تُستخدم العمليات غير المتزامنة عادةً في البرامج التي تتعامل مع العمليات المتوازية أو المهام الطويلة التي يمكن تنفيذها بشكل مستقل دون الإنتظار.
  • يمكن أن تزيد البرمجة غير المتزامنة من كفاءة التطبيقات التي تتعامل مع العمليات المتوازية أو تحتاج إلى الاستمرار في الاستجابة بينما تعمل عمليات أخرى.
يعني بشكل مختصر بقوم بمهمة ويذهب للمهمة الي بعدها بشكل مستقل وبدون انتظار.

ككود ؟
Python:
import time

def task(name):
    print(f"{name} started.")
    time.sleep(2)
    print(f"{name} completed.")

def main():
    print("Main program started.")
    task("Task 1")
    task("Task 2")
    print("Main program completed.")

if __name__ == "__main__":
    main()
في الكود السابق نلاحظ أن هناك function اسمها task تأخذ اسم وتقوم بطباعة جملة started وثم تنتظر ثانيتين وبعدها تطبع completed وبعدين بترجع لل main

1712943933959.png

مثال على البرمجة المتزامنة

طيب يلا نحوله لغير متزامن :
Python:
import asyncio

async def task(name):
    print(f"{name} started.")
    await asyncio.sleep(2)
    print(f"{name} completed.")

async def main():
    print("Main program started.")
    await asyncio.gather(task("Task 1"), task("Task 2"))
    print("Main program completed.")

if __name__ == "__main__":
    asyncio.run(main())
نفس مهمة الكود السابق لكن خلينا نلاحظ الفرق في شاشة الطباعة

1712944094179.png

مثال على البرمجة الغير متزامنة

بنلاحظ أنه استدعى function 2 قبل أن ينتهي من function 1 مع بقاء function 1 يعمل في الخلفية .


ميزات و سلبيات

البرمجة المتزامنة (Synchronous Programming):

ميزات:

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

سلبيات:

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

البرمجة الغير متزامنة (Asynchronous Programming):

ميزات:

  1. استجابة أفضل: يمكن للبرنامج الاستمرار في العمل بينما تنتظر بعض العمليات الطويلة للإكتمال، مما يوفر استجابة أفضل للمستخدم.
  2. أداء محسن: يمكن للبرمجة غير المتزامنة استخدام الموارد بشكل أكثر كفاءة، مما يؤدي إلى تحسين الأداء في بعض الحالات.
  3. تسهيل التعامل مع الإدخال/الإخراج طويل الأمد: يسهل استخدام البرمجة غير المتزامنة التعامل مع العمليات التي تأخذ وقتًا طويلاً مثل الإدخال/الإخراج من مصادر خارجية.

سلبيات:

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

1712948061528.gif
باختصار يجب معرفة ما تحتاجه بالضبط لأن ذلك ربما يأثر على أمن البرنامج سواءً كان كحماية أو توفر الخدمة طوال الوقت ويعود بعض مشاكل توقف البرامج crush لهذا السبب

لا تنسى الدعاء لأهلنا بفلسطين 🤲🏻
 
بسم الله الرحمن الرحيم

في البداية يمكن تتساءل شو معنى تزامن ؟
التزامن يعني التوافق أو التوازن في التوقيت أو الشَّيئان اتَّفقا في الزَّمن ، وفي سياق البرمجة تُستخدم لوصف العمليات التي تحدث بترتيب متتالي ومتناسق.
في البرمجة، العمليات التزامنية تحدث بتسلسل محدد، حيث تبدأ العملية الثانية بعد انتهاء العملية الأولى وهكذا، وتكون تنفيذ العمليات متقاربة في الوقت.
طيب وهيك شرحنا المفهوم الأساسي، الآن كبرمجة عندنا نوعين وهما :


البرمجة المتزامنة (Synchronous Programming) :
  • في البرمجة المتزامنة، العمليات تنفذ بتسلسل معين وتتوقف عندما تتوقف عملية معينة عن الإنتظار.
  • تُستخدم العمليات المتزامنة عادةً في البرامج التي تتطلب تنفيذ الخطوات بترتيب محدد، مثل البرامج الخطية أو التي تتعامل مع الإدخال/الإخراج بشكل متتالي.
  • يمكن أن تؤدي العمليات المتزامنة إلى تأخير في التنفيذ إذا كان هناك انتظار لإكمال العمليات السابقة قبل بدء العمليات التالية.

يعني بشكل مختصر بقوم بمهمة وبنتظر لحتى تنتهي بعدها بروح على المهمة الي بعدها بشكل متسلسل ومتوازي .

البرمجة الغير متزامنة (Asynchronous Programming) :
  • في البرمجة غير المتزامنة، العمليات تنفذ مستقلة بمعنى أن البرنامج لا ينتظر اكتمال العملية الحالية قبل بدء العملية التالية.
  • تُستخدم العمليات غير المتزامنة عادةً في البرامج التي تتعامل مع العمليات المتوازية أو المهام الطويلة التي يمكن تنفيذها بشكل مستقل دون الإنتظار.
  • يمكن أن تزيد البرمجة غير المتزامنة من كفاءة التطبيقات التي تتعامل مع العمليات المتوازية أو تحتاج إلى الاستمرار في الاستجابة بينما تعمل عمليات أخرى.
يعني بشكل مختصر بقوم بمهمة ويذهب للمهمة الي بعدها بشكل مستقل وبدون انتظار.

ككود ؟
Python:
import time

def task(name):
    print(f"{name} started.")
    time.sleep(2)
    print(f"{name} completed.")

def main():
    print("Main program started.")
    task("Task 1")
    task("Task 2")
    print("Main program completed.")

if __name__ == "__main__":
    main()
في الكود السابق نلاحظ أن هناك function اسمها task تأخذ اسم وتقوم بطباعة جملة started وثم تنتظر ثانيتين وبعدها تطبع completed وبعدين بترجع لل main

مشاهدة المرفق 9914
مثال على البرمجة المتزامنة

طيب يلا نحوله لغير متزامن :
Python:
import asyncio

async def task(name):
    print(f"{name} started.")
    await asyncio.sleep(2)
    print(f"{name} completed.")

async def main():
    print("Main program started.")
    await asyncio.gather(task("Task 1"), task("Task 2"))
    print("Main program completed.")

if __name__ == "__main__":
    asyncio.run(main())
نفس مهمة الكود السابق لكن خلينا نلاحظ الفرق في شاشة الطباعة

مشاهدة المرفق 9915
مثال على البرمجة الغير متزامنة

بنلاحظ أنه استدعى function 2 قبل أن ينتهي من function 1 مع بقاء function 1 يعمل في الخلفية .


ميزات و سلبيات

البرمجة المتزامنة (Synchronous Programming):

ميزات:

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

سلبيات:

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

البرمجة الغير متزامنة (Asynchronous Programming):

ميزات:

  1. استجابة أفضل: يمكن للبرنامج الاستمرار في العمل بينما تنتظر بعض العمليات الطويلة للإكتمال، مما يوفر استجابة أفضل للمستخدم.
  2. أداء محسن: يمكن للبرمجة غير المتزامنة استخدام الموارد بشكل أكثر كفاءة، مما يؤدي إلى تحسين الأداء في بعض الحالات.
  3. تسهيل التعامل مع الإدخال/الإخراج طويل الأمد: يسهل استخدام البرمجة غير المتزامنة التعامل مع العمليات التي تأخذ وقتًا طويلاً مثل الإدخال/الإخراج من مصادر خارجية.

سلبيات:

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

باختصار يجب معرفة ما تحتاجه بالضبط لأن ذلك ربما يأثر على أمن البرنامج سواءً كان كحماية أو توفر الخدمة طوال الوقت ويعود بعض مشاكل توقف البرامج crush لهذا السبب

لا تنسى الدعاء لأهلنا بفلسطين 🤲🏻
بارك الله فيك يا وحش، طرح اكثر من رائع
ننتظر هذا الجديد دايمًا
وربنا ينصر أهلنا بفلسطين ❤️
 
مشكور على الشرح الجميل
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى