JavaRush /مدونة جافا /Random-AR /تعدد مؤشرات الترابط في جافا

تعدد مؤشرات الترابط في جافا

نشرت في المجموعة

مقدمة

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

العمليات

ستكون العملية ( العملية ) في هذه الحالة هي تنظيم عمل استقبال المستندات. في المنظمة، يمكن التمييز بين العديد من العمليات: المحاسبة، وتطوير البرمجيات، والاجتماعات مع العملاء، وعمليات المستودعات، وما إلى ذلك. يتم تخصيص الموارد لكل عملية: المباني والموظفين لتنفيذها. العمليات معزولة عن بعضها البعض: لا يستطيع موظفو الموارد البشرية الوصول إلى قاعدة البيانات المحاسبية، ولا يتجول مديرو خدمة العملاء حول المستودع. إذا كانت العملية بحاجة إلى الوصول إلى موارد شخص آخر، فمن الضروري إنشاء اتصال بين العمليات: المذكرات والاجتماعات المشتركة.

تيارات

يتم تنظيم العمل في العملية إلى خيوط ( java thread). بالنسبة لقسم الموارد البشرية، التدفق هو تنظيم العمل لخدمة مجموعة. في الصورة الأولى يوجد تدفق واحد، وفي الثلاثة التالية يوجد تدفقان. ضمن هذه العملية، يمكن تنفيذ الخيوط بالتوازي - يقبل اثنان من مسؤولي الموارد البشرية مجموعتين أو أكثر من الموظفين المستقبليين. يسمى تفاعل ضباط شؤون الموظفين مع المجموعات - معالجة الخيوط داخل العملية - بمزامنة الخيوط . تُظهر رسومات تصميم مجموعتين بواسطة ضابط أركان واحد الأساليب: الزي الرسمي (فتاة - فتى - فتاة - فتى) وبأولويات مختلفة (فتاتان تتناوبان مع صبي واحد). تتمتع الخيوط بإمكانية الوصول إلى موارد العملية التي تنتمي إليها: يتم منح مجموعات موظف الموارد البشرية عينات من نماذج الطلبات وأقلام لملء المستندات. ولكن إذا تفاعلت التدفقات مع الأشياء المشتركة بينها، فمن الممكن وقوع حوادث. إذا طلب منك ضابط شؤون الموظفين أن تصرخ باسم آخر شخص في قائمة الانتظار، ففي حالة مجموعتين، فهو غير متأكد مسبقًا مما إذا كان سيسمع اسم امرأة أم اسم رجل. تعد تعارضات الوصول إلى البيانات والحظر وطرق حلها موضوعًا مهمًا للغاية.

حالات التدفق

كل موضوع في إحدى الحالات التالية:
  • تم الإنشاء ( New) – يستعد الطابور الخاص بموظف الموارد البشرية، ويتم تنظيم الأشخاص.
  • تم الإطلاق ( Runnable) - تم اصطفاف قائمة الانتظار الخاصة بنا لموظف الموارد البشرية وتتم معالجتها.
  • محظور ( Blocked) – يحاول آخر شاب في الطابور أن يصرخ باسمه، ولكن عندما سمع أن الفتاة في المجموعة التالية بدأت تفعل ذلك قبله، صمت.
  • مكتمل ( Terminated) - تم إكمال قائمة الانتظار بالكامل بواسطة مسؤول الموارد البشرية وليس هناك حاجة لذلك.
  • الانتظار ( Waiting) - قائمة انتظار واحدة تنتظر إشارة من أخرى.
تنظيم الخيوط وتفاعلها هو الأساس للتشغيل الفعال للعمليات.

دعنا نعود إلى عالم تكنولوجيا المعلومات

في القرن الحادي والعشرين، أصبح التنفيذ متعدد الخيوط والمتوازي ذا صلة. منذ التسعينيات من القرن الماضي، أصبحت أنظمة التشغيل متعددة المهام Windows وMacOS وLinux راسخة على أجهزة الكمبيوتر المنزلية. يمكنك غالبًا العثور على أربعة معالجات أساسية أو أكثر فيها. لقد تجاوز عدد الكتل المتوازية لبطاقات الفيديو GPU بالفعل الألف. تتم كتابة البرامج الشائعة مع مراعاة تعدد مؤشرات الترابط (تعدد مؤشرات الترابط)، على سبيل المثال، الإصدارات الحديثة من برامج معالجة الرسومات أو الفيديو أو التشغيل بكميات كبيرة من البيانات: Adobe Photoshop وWinRar وMathematica والألعاب الحديثة. يعد تعدد مؤشرات Java موضوعًا مهمًا وشائعًا ومعقدًا للغاية. لذلك، يوجد في دورة JavaRush العديد من المهام لفهمها جيدًا. ستساعدك أمثلة Java على تعدد مؤشرات الترابط على إتقان الفروق الدقيقة والدقيقة الأساسية في هذه المنطقة، ومزامنة عمل سلاسل الرسائل.

عملية

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

تدفق

جافا Thread(تيار). في بعض الأحيان، لتجنب الخلط بين فئات Java الأخرى Streamوما شابه ذلك، غالبًا ما تتم ترجمة سلاسل Java كسلسلة رسائل. يستخدمون الموارد المخصصة لعملية ما وهم الطريقة التي يتم بها تنفيذ العملية. الخيط الرئيسي ينفذ الطريقة mainويخرج. عند تنفيذ عملية ما، يمكن إنشاء سلاسل عمليات إضافية (سلاسل فرعية). يمكن لخيوط العملية نفسها تبادل البيانات مع بعضها البعض. يتطلب تعدد مؤشرات الترابط في Java مراعاة مزامنة البيانات، ولا تنس ذلك. في Java، تنتهي العملية عند انتهاء آخر مؤشر ترابط لها. بالنسبة للمهام الخلفية، يمكن بدء سلسلة محادثات كبرنامج خفي ( daemon)، والفرق عن المهمة العادية هو أنه سيتم إنهاؤها قسريًا عندما daemonتنتهي جميع العمليات غير سلاسل العمليات.

أول تطبيق متعدد الخيوط

هناك أكثر من ستة طرق لإنشاء سلاسل الرسائل؛ في دورة JavaRush، سنفحصها بالتفصيل. أولا، دعونا نتعرف على واحدة من الأساسية. هناك فئة خاصة تحتاج إلى كتابة تعليمات برمجية تنفذ منطق البرنامج Thread. run()بعد إنشاء سلسلة رسائل، يمكنك البدء بها عن طريق الاتصال بـ start(). لنكتب برنامجًا تجريبيًا ينفذ مثالاً على تعدد مؤشرات الترابط في Java.
class PeopleQueue extends Thread    {// Наша очередь из сотрудников, наследник класса Thread
    private String[] names;

    PeopleQueue(String... names) {// Конструктор, аргумент- массив имен сотрудников
        this.names = names;
    }

    @Override
    public void run() { // Этот метод будет вызван при старте потока
        for (int i = 0; i < names.length; i++) { // Вывод в цикле с паузой 0.5 сек очередного сотрудника
            System.out.println("Обработаны documentы: " + names[i]);
            try {
                sleep(500); // Задержка в 0.5 сек
            } catch (Exception e) {}
        }
    }
}

public class HR    {// Класс для демонстрации работы потока
    public static void main(String[] args) {
        // Создаем две очереди
        PeopleQueue queue1 = new PeopleQueue("Ivan","Сергей","Николай","Фердинанд","Basil");
        PeopleQueue queue2 = new PeopleQueue("Мария","Людмила","Алиса","Карина","Olga");

        System.out.println("Начали!"); // Сообщение из главного потока программы
        queue1.start();    //Запускаем одну очередь (дочерний поток)
        queue2.start(); //Запускаем вторую (дочерний поток)
    }
}
لنبدأ البرنامج. تعرض وحدة التحكم إخراج الرسالة من سلسلة الرسائل الرئيسية. queue1بعد ذلك، يقوم كل مؤشر ترابط فرعي queue2بدوره بإخراج رسائل إلى وحدة التحكم المشتركة الخاصة به حول الموظف الذي تتم معالجته التالي. أحد الخيارات الممكنة للبرنامج:
Начали!
Обработаны documentы: Мария
Обработаны documentы: Ivan
Обработаны documentы: Людмила
Обработаны documentы: Сергей
Обработаны documentы: Алиса
Обработаны documentы: Николай
Обработаны documentы: Карина
Обработаны documentы: Фердинанд
Обработаны documentы: Ольга
Обработаны documentы: Васorй

Process finished with exit code 0
يعد تعدد مؤشرات الترابط في Java موضوعًا معقدًا ومتعدد الأوجه. ستساعدك القدرة على كتابة التعليمات البرمجية باستخدام الحوسبة المتوازية ومتعددة المهام ومتعددة الخيوط على تنفيذ المهام بشكل فعال على المعالجات والمجموعات الحديثة متعددة النواة التي تتكون من العديد من أجهزة الكمبيوتر.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION