خيط (حاسوب)

الخيوط المتعددة  والعمليات المتعددة

الفرق بين الخيوط المتعددة (بالإنجليزية: multiple threaded)  والعمليات المتعددة (بالإنجليزية: multiple processes).
عندما تكون كل عمليه لديها وضعيه متكامله من المتغيرات متغير (علم الحاسوب)
threads تشاركها نفس المعلومات، وهذا قد يشكل خطرًا. مع ذلك  مشاركة المتغيرات تجعل الاتصال بين الخيوط  threads أسهل وأفضل للبرمجه من الاتصال بين العمليات.
في بعض انظمة التشغيل threads  تكون من  "lightweight "  أكثر من العمليات  processes
Multithreading  كالمستعرض يقوم بلحظات تحميل أكثر من صوره في نفس الوقت وخادم الشبكه لابد من ان يكون قادر على مزامنة طلب المستخدم.
واذا اطلعنا على GUI كل منها يحمل thread منفصل يجمع الحدث ليراه المستخدم من بيئة تشغيل المضيف

الخيط

اذا نظرنا في برنامج لا يستخدم الخيوط الحاسوبيه المتعدده multiple threads
يصعب على المستخدم ان يؤدي عدة مهام في هذا البرنامج اما اذا كان هناك برنامج
يستخدم separate threads سنجد سهولة في عمل البرنامج.
دالة thread.sleep  لا تنشأ داله جديدة بل هي دالة ثابته في مصفوفة خيط (حاسوب)
بشكل مؤقت توقّف عمل النشاط الذي يستخدم الـ خيط (حاسوب)  الحالي

الخيوط الجديدة 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
يمكن ان يتنقل الـ الخيط من حاله لاخرى عندما يكون الخيط محظور او في الانتظار وايضا عندما يخرج من البرنامج يأتي خيط آخر ينظم التشغيل.

خواص الخيوط Thread Properties

في لغة البرمجه كل خيط له اولويه وكل خيط يورّث اولويه للخيط الذي ينشأه. ويمكن زياده او انقاص اولوية اي خيط عن طريق دالة setPriority تستطيع ضبط الاولويه لأي قيمه بين
MIN_PRIORITY (معرفه كـ 1 في Thread class )
و MAX_PRIORITY معرفه كـ 10 NORM_PRIORITY  معرف كـ 5. 
كلما اتيحت الفرصه لمنظم الخيوط ان يختار خيط جديد يفضل ذا اولويه عاليه.
اولويات الخيوط هي highly system dependent,  عندما تعتمد الآله الفعليه على تطبيق الخيط لبرنامج المضيف الذي
يحتوي على خيط او أكثر من مستويات الاولويه
مثال: Windows  يحمل 7 مستويات للاولويه. بعض اولويات الجافا تشير إلى نفس مستوى نظام التشغيل في The Sun JVM for Linux كل الخيوط تحتوي على نفس المستوى