سؤال من ضمن أسئلة كتير كانت بتتسأل قبل كده في الانترفيوهات هو ايه الفرق بين الـ Process والـ Threads ؟
وفي البرمجة ونظم التشغيل، بتستخدم مصطلحات زي الـ Program والـ Process والـ Thread بشكل متكرر. فخلونا نفهم الفرق بين المصطلحات دي بطريقة مبسطة وسهلة.
ايه هو الـ Program ؟
الـ Program هو مجموعة من التعليمات المكتوبة بلغة برمجة معينة لتنفيذ مهمة محددة. ببساطة، هو الـ Code اللي بتكتبه وتخزنه في ملف. على سبيل المثال، ابسط برنامج هو ملف hello_world.py
المكتوب بلغة بايثون واللي ممكن يكون بالشكل ده:
print("Hello, World!")
فالملف ده هو عبارة عن برنامج. وعشان يتم تنفيذ البرنامج ده، لازم يتم تحميله وتشغيله بواسطة نظام التشغيل.
وأمثلة تانية للـ Program هي التطبيقات اللي بنشغلها وموجودة بطبعيتها على سطح المكتب زي الـ Chrome أو الـ Microsoft Word على سبيل المثال
ايه هي الـ Process ؟
الـ Process هو برنامج قيد التشغيل. يعني ايه ؟ يعني هو عبارة عن Program اتعمله Execute فلما نظام التشغيل بيروح يحمل البرنامج من الـ Disk للـ (RAM) ويبدأ في تنفيذه، بيتحول البرنامج بتاعنا إلى عملية (Process).
الـ Process بتحتوي على الـ Code القابل للتنفيذ، وبيانات البرنامج الخاصة بيه، ومجموعة من الموارد التي يستخدمها البرنامج أثناء تشغيله زي الـ Registers والـ Program Counter والـ Stack.
مثال:
لو جينا نشغل برنامج hello_world.py
على جهازنا، نظام التشغيل هيروح يـ Create Process للبرنامج بتاعنا. والـ Process دي هتشمل جميع الموارد اللازمة لتنفيذ الـ Code بتاعنا وطباعته على الشاشة.
وعشان نبسط الموضوع أكتر , اما بنروح نفتح Chrome أو أي برنامج زي Microsoft Word , نظام التشغيل بيروح ينفذ الـ Instructions والـ Code اللي البرنامج بيتكون منه ويبدأ يحمله في الـ RAM ويجهز كل الموارد اللي البرنامج ده محتاجها.
وممكن البرنامج اما يروح للـ RAM ويشتغل يبقى عبارة عن أكتر من Process فالـ Chrome مثلا بتخلي كل Tab هتعملها تبقى في Process منفصلة تمامًا.
تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀
النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉
ايه هو الـ Thread ؟
الـ Thread هو أصغر وحدة تنفيذ ممكن نظام التشغيل يديرها، فكل عملية (Process) بتحتوي على الأقل على Thread واحد بنسميه الـ Main Thread, والـ Thread ده بيمثل سلسلة من التعليمات اللي ممكن تنفيذها.
والـ Process الواحدة ممكن تحتوي على أكتر من Threads بتشتغل بشكل متوازي لتحسين الأداء.
مثال 1
فعلى سبيل المثال في الـ Microsoft Word كنا اتكلمنا في الـ Parallelism في مقال سابق عن ازاي بيستغل الـ Multi-Threading في انه بيخلي عملية الـ Find and Replace سهلة فهو يقدر لو عندك ملف ضخم وكبير انه يوزع عملية البحث دي على أكتر من Threads عشان يسرع عملية البحث.
مثال 2
وممكن برضو يكون عندنا أكتر من Thread غير الـ Main Thread زي انك تكتب عادي جدًا في ملف الـ Microsoft Word ده بيقوم بدوره Thread وفيه Thread تاني دوره انه يعمل Spell Checking.
مثال 3
ممكن يكون عندي مجموعة من الـ Files اللي عاوز احملها من على الانترنت واستغل في ده أكتر من Thread واحد عشان احسن من الأداء.
فبدل ما انزل كل File ورا التاني بشكل Sequential في الـ Main Thread, فده هيكون بطئ جدًا وده لان لو كل File هياخد مثلا دقيقة وعندي 3 ملفات فكده هستنى 3 دقائق , ولكن انا ممكن اعمل ده بشكل متوازي واحمل الـ 3 والـ 3 ينزلوا في دقيقة واحدة بس بحيث أخلي كل Thread ينزل ملف من الملفات.
وده مثال بسيط بالـ python :
import threading
def download_file(file_url):
# Code to download the file from file_url
print(f"Downloading {file_url}")
file_urls = ["file1.txt", "file2.txt", "file3.txt"]
threads = []
for url in file_urls:
thread = threading.Thread(target=download_file, args=(url,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
في الختام
- الـ Program: هو الـ Code المكتوب بلغة برمجة معينة واللي بيحتوي على مجموعة من الـ Instructions.
- الـ Process: هو برنامج قيد التشغيل يعني Runnable Program وبيتضمن الـ Code القابل للتنفيذ والبيانات والموارد الخاصة بيه.
- الـ Thread: هو أصغر وحدة تنفيذ داخل الـ Process، وممكن الـ Thread الواحد يشتغل بشكل متوازي مع Threads تانية لتحسين الأداء.