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

خيط حاسوبي

من ويكيبيديا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث
N write.svg
هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر عدا الذي أنشأها؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. (مايو 2015)
Commons-emblem-merge.svg
لقد اقترح دمج محتويات هذه المقالة أو الفقرة في المعلومات تحت عنوان خيط (حاسوب). (نقاش) (أكتوبر 2015)

[1] الــ Threads او الخيوط الحاسوبيه

في الغالب نحن معتادون على تعدد المهام في نظام التشغيل; السماحيه لعمل أكثر من برنامج في وقت واحد.

Multithreaded programs تآخذ فكرة تعدد المهام عن طريق اخذها في مستوى اقل; كل برنامج فردي يظهر عدة مهام في نفس الوقت و كل مهمه تسمى خيط (حاسوب). تستطيع البرامج تشغيل أكثر من خيط (حاسوب) في نفس الوقت وهي اختصار لـ خيط التحكم

والبرامج التي تستطيع تشغيل أكثر من خيط حاسوبي في كل مره تسمى متعددة الخيوط الحاسوبية.

ما الفرق بين الخيوط المتعدده (multiple threaded) و العمليات المتعدده multiple processes ؟[عدل]

عندما تكون كل عمليه لديها وضعيه متكامله من المتغيرات متغير (علم الحاسوب)

threads تشاركها نفس المعلومات، وهذا قد يشكل خطرًا. مع ذلك مشاركة المتغيرات تجعل الاتصال بين الخيوط threads أسهل وأفضل للبرمجه من الاتصال بين العمليات.

في بعض انظمة التشغيل threads  تكون من  "lightweight "  أكثر من العمليات  processes
Multithreading  كالمستعرض يقوم بلحظات تحميل أكثر من صوره في نفس الوقت وخادم الشبكه لابد من ان يكون قادر على مزامنة طلب المستخدم.

واذا اطلعنا على GUI كل منها يحمل thread منفصل يجمع الحدث ليراه المستخدم من بيئة تشغيل المضيف

ماهي ال خيط (حاسوب) ؟[عدل]

اذا نظرنا في برنامج لا يستخدم الخيوط الحاسوبيه المتعدده multiple threads

يصعب على المستخدم ان يؤدي عدة مهام في هذا البرنامج اما اذا كان هناك برنامج

 يستخدم separate threads سنجد سهولة في عمل البرنامج.

دالة thread.sleep لا تنشأ داله جديدة بل هي دالة ثابته في مصفوفة خيط (حاسوب)

بشكل مؤقت توقّف عمل النشاط الذي يستخدم الـ خيط (حاسوب) الحالي

حالات الـ الخيوط (Thread states)[عدل]

ممكن ان يكون في واحده من هذه الحالات

  1. New
  2. Runnable
  3. Block
  4. Waiting
  5. Time waiting
  6. Terminated

لتحديد حالة الـ thread الحالي، دالة getState()

تقوم بتحديد حالة الخيط الحالي
الدوال المستخدمه في حالات الخيوط الحاسوبيه.png

New Threads[عدل]

عندما تنشآ thread بأداة التشغيل new مثال: new Thread(r) - the thread is not running yet هنا الخيط لم يتم تشغيله بعد، وهذا يعني ان البرنامج لم ينفذ الشفره (codes). هناك كميه معينه من الحسابات التي تحتاج ان تنتهي قبل تشغيل الـ خيط (thread)

Runnable Threads[عدل]

عندما تنفذ دالة start،  الخيط الحاسوبي  (thread) يكون في حالة  runnable state

تعتمد runnable state على نظام التشغيل في العمل. عندما يعمل الخيط thread ليس من الضروري ان يبقى قيد التشغيل، ولكن يستحق التشغيل اذا كان هناك الكثير من الـ running threads وتوقفت لسبب فهنا تأتي الفرصه للخيوط الاخرى بالعمل. تفاصيل الخيوط threads تعتمد على الخدمه التي يوفرها نظام التشغيل. نظام المنظم scheduler system يعطي runnable thread جزء من الوقت ليؤدي مهامه. عندما نختار الـ thread التالي نظام التشغيل يأخذ في الحسبان اولوية الـthread

Blocked and Waiting Threads[عدل]

عندما يكون الخيط محظور (blocked) او في الانتظار (waiting). هو مؤقتًا غير فعال لاينفّذ اي شفره ويستهلك مصادر أقل ويعتمد ايضا على thread scheduler لاعادة التشغيل وهذه التفاصيل تعتمد على كيفة الوصول إلى الحاله الغير مفعله. عندما يحاول thread ان يكتسب كائن محظور ( lock) لايتضمن حظره على java.util.concurrent library . الـ thread يصبح غير محظور ( unblocked) عندما تكون كل الخيوط threads تنازلت عن الحظر و thread scheduler يسمح لهذه الخيوط ان تمسك بهذا الكائن. عندما ينتظر الخيط خيط اخر لينبه منظم الخيوط ( thread scheduler) لحاله معينه، يدخل في حالة الانتظار وهذا يحدث عن طريق نداء دالة Object.wait or Thread.wait او عن طريق انتظار lock او condition في java.util.concurrent library الكثير من الدوال تحتوي على parameters غير ثابته خارج الوقت timeout.

مناداتها يسبب للخيط (thread)ان يدخل في حاله timed waiting 

وهذه الحاله تستمر حتى نفاذ الوقت او ان تتلقى المنبه الصحيح دوال timeout تتضمن Threas.sleep و timed version of

Object.wait, Thread.join, lock.tryLock and Condition.await

يمكن ان يتنقل الـ الخيط من حاله لاخرى عندما يكون الخيط محظور او في الانتظار وايضا عندما يخرج من البرنامج يأتي خيط آخر ينظم التشغيل.


Terminated Threads[عدل]

يقطع الــthread لسبب من هذه الاسباب:

  • يموت بشكل طبيعي لان دالة التشغيل تخرج بشكل عادي
  • يموت فجأه اذا uncaught Exception قطع دالة التشغيل

يمكن قتل الـ Thread بتنفيذ دالة stop وهذه الداله throws ThreadDeath error تلقي كائن يقتل الـ thread

Thread Properties[عدل]

Thread priorities[عدل]

في لغة البرمجه كل خيط له اولويه وكل خيط يورّث اولويه للخيط الذي ينشأه. ويمكن زياده او انقاص اولوية اي خيط عن طريق دالة setPriority تستطيع ضبط الاولويه لأي قيمه بين
MIN_PRIORITY (معرفه كـ 1 في Thread class )

فالدوال واستخداماتها.png

و MAX_PRIORITY معرفه كـ 10 NORM_PRIORITY معرف كـ 5.
كلما اتيحت الفرصه لمنظم الخيوط ان يختار خيط جديد يفضل ذا اولويه عاليه.
اولويات الخيوط هي highly system dependent, عندما تعتمد الآله الفعليه على تطبيق الخيط لبرنامج المضيف الذي

يحتوي على خيط او أكثر من مستويات الاولويه

مثال: Windows يحمل 7 مستويات للاولويه. بعض اولويات الجافا تشير إلى نفس مستوى نظام التشغيل في The Sun JVM for Linux كل الخيوط تحتوي على نفس المستوى

Daemon Threads[عدل]

تستطيع تحويل الخيط او thread إلى daemon thread بمناداة دالة

t.setDaemon(true);

وظيفته الوحيده هي خدمة الغير، مثال: timer thread وظيفته يرسل الدقّات المعتاده للساعه للخيوط الاخرى او الخيط الذي ينظف catche من البقايا القديمه. الآله الفعليه virtual machine تخرج اذا كانت كل الخيوط Daemon Threads
لانه لامعنى لعمل البرنامج اذا كانت كل الخيوط Daemon

مصادر[عدل]

  1. ^ Horstmann, Cay S., 1959- Core Java Volume 1 Fundamentals 8th edition