- •28. Синхронізація за принципом бар'єра
- •29. Синхронізація процесів користувача у Linux.Ф’ютекси
- •30. Види міжпроцесової взаємодії
- •31. Міжпроцесова взаємодія на базі спільної пам'яті
- •32. Технології передавання повідомлень
- •33. Взаємні блокування
- •34. Умови виникнення взаємних блокувань
- •35. Запобігання взаємним блокуванням на рівні ос
- •36. Підхід ведучого-веденого
- •37. Підхід портфеля задач
- •38. Підхід конвеєра
- •39. Проблеми реалізації'віртуальної пам'яті. Фрагментація пам'яті
- •41. Сегментація пам'яті
- •42. Сторінкова організація пам'яті
- •43. Сторінково-сегментна організація пам'яті
- •44. Поняття підкачування
- •45. Поняття сторінкового переривання
- •46. Алгоритм fifo
- •47. Оптимальний алгоритм
- •48. Алгоритм lru
- •49. Годинниковий алгоритм
- •50. Організація заміщення сторінок
- •51. Поняття файла і файлової системи
- •52. Організація інформації у файловій системі
- •53. Операції над файлами і каталогами
- •54. Файлові операції posix
37. Підхід портфеля задач
У разі використання підходу портфеля задач (workpile) або бригади робітників (work crew) робочі потоки здійснюють запити на свої частини роботи (одиниці роботи) із «портфеля задач», який зазвичай є чергою. Під час виконання робочому потокові надають можливість додавати нові одиниці роботи в портфель (для наступного використання іншими потоками). Використання моделі завершується, коли в портфелі не залишається одиниць роботи; керуючий потік може також припинити виконання явно (якщо, наприклад, воно триває занадто довго або, навпаки, результату досягнуто раніше, ніж спорожнів портфель задач).
Основні переваги цього підходу полягають у його простоті, автоматичному розподілі навантаження між робочими потоками, добрій масштабованості.
Розглянемо базову послідовність кроків у разі використання портфеля задач.
Основний потік створює набір робочих потоків у призупиненому стані, заносить у портфель вихідну роботу і відсилає сигнал про це, поновлюючи один із робочих потоків. Після цього він залишається чекати сигналу про закінчення роботи.
Робочий потік забирає одиницю роботи з портфеля (звичайно з початку черги), обробляє її та продовжує чекати нової роботи. Наприклад, під час багато- потокового пошуку у файловій системі роботою може бути ім'я каталогу, а її обробкою — обхід цього каталогу.
Під час виконання дій робочому потокові може знадобитися створити нову одиницю роботи. Щоб передоручити частину роботи іншому потокові, він додає її в портфель (звичайно в кінець черги). Прикладом може бути ситуація, коли під час обходу каталогу трапляється підкаталог. Його ім'я можна помістити в портфель, передавши роботу з його обходу іншому потокові.
Якщо усі потоки забрали свої роботи з портфеля і жоден не додав нової, останній з потоків, що завершують роботу, відсилає решті сигнал про закінчення роботи.
38. Підхід конвеєра
У разі використання підходу конвеєра (pipeline) задачу передають набору потоків, кожен із яких обробляє дані услід за попереднім потоком і перед тим, як почне обробку наступний, подібно до робітника на конвеєрі. Паралельність алгоритму полягає в тому, що дані можуть переміщатися конвеєром одні за одними, і обробка даних може бути почата задовго до того, як завершиться робота з попередніми. Звичайно способи обробки на кожному етапі конвеєра відрізняються (такий конвеєр називають гетерогенним); є також гомогенні конвеєри, у яких на кожному етапі виконують той самий код.
Конвеєр є узагальненням моделі виробників-споживачів на п потоків, при цьому
стандартний зв'язок між виробником і споживачем підтримується між будь-якими двома сусідніми потоками конвеєра.
Кожен потік очікує отримання даних, після чого він обробляє їх і намагається передати наступному потокові; якщо той не готовий до цього, потік-відправ- ник чекає.
Відіславши дані, потік-відправник поновлює потік-одержувач і продовжує очікування нових даних.
Цикл роботи конвеєра починається з передавання даних його першому потокові, а закінчується тим, що кінцевий одержувач (зазвичай головний потік) чекає отримання даних останнім потоком конвеєра і зчитує ці дані як остаточний результат.
