Волокно (програмування)
У програмуванні волокно — особливо легковагова нить виконання. Подібно до нитей, волокна використовують спільний адресний простір: але (там де існує різниця) волокна використовують кооперативну багатозадачність, в той час як ниті покладаються на упереджувальну виштовхувальну багатозадачність. Ниті здебільшого залежать від планувальника задач, який призупиняє одну нить і дає виконуватися іншій нитці. Волокна ж самі передають управління іншим волокнам.
Волокна і співпроцедури
ред.По суті, волокна описують ті самі концепції, що і співпроцедура. Різниця, якщо вона є, полягає в тому, що співпроцедури — це конструкції мовного рівня, форма управління потоком інструкцій, в той час як волокна — конструкції системного рівня, які виглядають як ниті, що не виконуються паралельно; взаємне переключення між волокнами виглядає як безадресний перехід між внутрішніми ділянками коду співпроцедур. Таке бачення є суперечним: волокна можуть розглядатися як реалізація співпроцедур[1], або ж як основа, на якій здійснюються співпроцедури[2].
Переваги і недоліки
ред.Оскільки багатозадачність волокон базується на явному переключенні між волокнами, проблем безпеки тут менше, ніж загалом з планованими нитями. Конструкції синхронізації, що включають взаємні блокування і атомарні дії, не потрібні при написанні коду з волокнами, оскільки вони явно синхронізовані. Проте, багато бібліотек використовують волокна явно, наприклад, при виконанні неблокуючого вводу-виводу; тобто, на це треба звертати увагу, дотримуючись певних обережностей і читати документацію.
Непрямим недоліком волокон є те, що вони виконуються в контексті планованих ниток, що їх породили; проте, модель N:M, коли кількість ниток не перевищує кількості ядер процесора, може бути ефективнішою, ніж варіанти тільки з волокнами або тільки з нитями.
Підтримка операційних систем
ред.Волокнам потрібна менша підтримка з боку операційної системи, ніж для ниток. Волокна підтримуються в багатьох сучасних системах Unix, що використовують бібліотечні функції getcontext(), setcontext() і swapcontext() з ucontext.h, як в GNU Portable Threads.
У Microsoft Windows волокна створюються викликами ConvertThreadToFiber() і CreateFiber(). Виконання волокна, що "підвішене" в цей час, можливо поновити з будь-якої ниті. При створенні кожному волокну можна передавати вказівник на пам'ять, призначену для зберігання приватних даних, аналогічно до зберігання приватних даних ниток [3].
Див. також
ред.Примітки
ред.- ↑ A Fiber Class. Архів оригіналу за 23 жовтня 2017. Процитовано 17 травня 2009.
- ↑ Implementing Coroutines for .NET by Wrapping the Unmanaged Fiber API [Архівовано 7 вересня 2008 у Wayback Machine.], Ajai Shankar, MSDN Magazine
- ↑ Fibers [Архівовано 6 квітня 2008 у Wayback Machine.], MSDN Library
Посилання
ред.- GNU Portable threads [Архівовано 12 липня 2008 у Wayback Machine.]
- Portable Coroutine Library [Архівовано 23 вересня 2009 у Wayback Machine.] на Freshmeat
Це незавершена стаття про операційні системи. Ви можете допомогти проєкту, виправивши або дописавши її. |
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |