Потік (англ. thread) або повніше потік виконання (англ. thread of execution), часто застосовуються назви нитка, нитка виконання та англіцизм тред — в інформатиці так називається спосіб програми розділити себе на дві чи більше паралельні задачі. Реалізація потоків та процесів відрізняються в різних операційних системах, але загалом потік міститься всередині процесу і різні потоки одного процесу спільно розподіляють деякі ресурси, у той час як різні процеси ресурси не розподіляють.
У системах з одним процесором багатопотоковість реалізується загалом поділом часу виконання («кванти часу»), дуже подібно до паралельного виконання багатьох задач: процесор послідовно переключається між різними потоками. Це переключення контексту відбувається настільки швидко, що в кінцевого користувача створюється ілюзія одночасного виконання. На багатопроцесорних чи на багатоядерних системах робота потоків здійснюється справді одночасно, оскільки різні потоки і процеси виконуються буквально одночасно різними процесорами або ядрами процесора. Особливості квантування в операційній системі Windows розглянуто в статті Квант (Windows).
Багато сучасних операційних систем прямо підтримують квантування часу і багатопроцесорну роботу потоків через планувальник процесів. Ядро операційної системи дозволяє програмісту маніпулювати потоками через інтерфейс системних викликів. Деякі реалізації викликають потоки ядра, оскільки [en] (англ. lightweight process, LWP) є спеціальним типом потоків ядра, що розподіляють деякі стани та інформацію.
Поза тим, програма може емулювати роботу потоків, використовуючи таймер, сигнали або інші методи, щоб перервати власне виконання і послідовно виконувати різні задачі власним квантуванням часу. Такий спосіб іноді зветься потоками користувацького простору (англ. user-space threads) або волокнами.
Зауваження щодо термінології
«Англо-український тлумачний словник з обчислювальної техніки, інтернету і програмування» (Київ, видавництво «СофтПрес», 2005), виданий за підтримки компанії Microsoft, подає переклад оригінального терміну thread українською мовою як потік, нитка, тред (ст. 494).
Порівняння потоків з процесами
Потоки відрізняються від традиційних процесів багатозадачних операційних систем, в тому що процеси:
- на загал, незалежні,
- дублюють значну частину інформації про стан,
- мають окремий адресний простір,
- взаємодіють тільки через системні міжпроцесорні механізми комунікацій.
Потоки всередині процесу, з іншої сторони, розподіляють інформацію про стан процесу, і прямо доступаються до спільної пам'яті та інших ресурсів. Переключення контексту між потоками процесу на загал швидше, ніж переключення контексту між процесами. Описуючи ситуацію такі системи, як Windows NT та (OS/2), кажуть, що мають «дешеві» потоки та «дорогі» процеси; в інших операційних системах ситуація не дуже відмінна.
Потоки вимагають більшої кваліфікації програмістів
Багатопотоковість є популярною моделлю програмування і виконання, бо дозволяє багатьом потокам існувати всередині контексту одного процесу, розподіляючи ресурси процесу, але виконуючись незалежно. Потокова модель програмування забезпечує розробникам корисні абстракції для паралельного виконання. Проте, можливо найцікавіше застосування технології у випадку, коли один процес виконується на багатопроцесорній системі.
Ця перевага багатопотокових програм дозволяє їм скоріше виконуватися на комп'ютерах з кількома процесорами, процесорами з кількома ядрами, або на кластері машин, бо потоки програми природно надають собі можливість справді паралельного виконання. У такому випадку програміст має бути особливо обережним, щоб уникнути стану гонитви та інших непередбачених поведінок. Для забезпечення коректної роботи з даними, потоки часто потребують процедури доступу до даних в певному порядку. Потоки також вимагають атомарних операцій (часто реалізованих з використанням семафорів), щоб уникнути одночасної неузгодженої модифікації даних або їхнього читання, у той час як процес модифікує дані. Недбале поводження з такими примітивами може призвести до взаємного блокування.
Планувальники операційних систем переключають потоки одним з двох можливих способів. Запобіжна або витісняюча багатопотоковість загалом розглядається як кращий підхід, бо вона дозволяє операційній системі визначити, коли може статися перемикання контексту. На противагу, кооперативна багатопотоковість покладається на самі потоки, щоб вони передали контроль виконання на точках зупину. Це може створити проблеми, якщо нить чекає на ресурс, який став недоступним. Недолік запобіжної багатопотоковості в тому, що перемикання контексту може статися в недоречну мить, спричиняючи або інші погані ефекти, яких можна уникнути в кооперативній багатопотоковості.
Традиційно базове комп'ютерне апаратне забезпечення не надавало багато підтримки багатонитевості, оскільки переключення між нитями загалом є вже скорішою процедурою порівняно з переключенням контексту процесів. Процесори вбудованих систем, що мають більші вимоги до поведінки в реальному часі, можуть мати апаратну підтримку багатонитевості зменшенням часу перемикання, можливо розміщуючи виділений блок регістрів для кожної ниті, замість того, щоб зберігати/читати загальні регістри. На кінці 1990-х стала відома ідея виконання інструкцій з різних нитей одночасно, це зветься одночасною багатонитевостю. Ця можливість була введена в процесорі Intel Pentium 4 під ім'ям Hyper-threading.
Процеси, нитки і волокна
Процес є «найважчим» об'єктом для планувальника ядра операційної системи. Власні ресурси процесу розміщені операційною системою. Ресурси включають пам'ять, відкриті файли та пристрої, сокети та вікна. Процеси не розділяють з кимось адресний простір чи залучені файли, за винятком явних методів, таких як успадкування файлів чи сегментів спільної пам'яті, або робота з файлами в режимі спільного доступу. Типово, процеси запобіжно багатозадачні. Але Windows 3.1 і старі версії Mac OS використовували кооперативну багатозадачність.
Нитка є «найлегшим» об'єктом для планувальника ядра. Щонайменше одна нитка існує всередині кожного процесу. Якщо в процесі співіснують багато ниток, вони розподіляють одну пам'ять і файлові ресурси. Нитки мають запобіжну багатозадачність, якщо планувальник процесів операційної системи запобіжний. Нитки не мають своїх власних ресурсів, за винятком стеку, копії регістрів включно з лічильником задач, і власне-нитковим зберіганням даних (якщо така можливість забезпечується).
В деяких ситуаціях є різниця між «нитками ядра» та «нитками користувача» — перші управляються і плануються ядром, другі управляються і плануються в просторі користувача. В цій статті термін «нитка» використовується для позначення поняття «нитка ядра», а поняття «волокно» (англ. fiber) означає нитка користувача. Волокна мають кооперативне планування: працююче волокно має явно зупинитися і передати управління іншому волокну. Волокно може бути запущено будь-якою ниткою в одному процесі.
Проблеми нитей та волокон
Паралелізм та структури даних
Нитки одного процесу розподіляють один адресний простір. Це дозволяє паралельно працюючому коду бути тісно взаємопов'язаним і зручно обмінюватися даними без залучення складних методів міжпроцесорного обміну. Але, доступні всім ниткам, навіть прості структури даних стають вразливі до помилок типу стану гонитви, якщо вони потребують більше однієї машинної команди під час присвоєння нових значень: дві нитки можуть одночасно спробувати змінити значення структури даних і внаслідок отримати зовсім не те, що бажалося. Такі помилки буває дуже важко виправити і ізолювати.
Щоб запобігти цьому, програмний інтерфейс ниток пропонує методи синхронізації, такі як м'ютекс (mutex) для блокування структур даних під час доступу при паралельному виконанні. На однопроцесорних системах, нитка, що запитала закритий м'ютекс, має перейти в пасивний (сонний) режим і планувальник переключає контекст іншої нитки. В багатопроцесорних системах, нитка (за відсутності інших конкуруючих ниток виконання на процесорі) стане запитувати м'ютекс, доки той не звільниться. Обидва ці способи зле впливають на продуктивність, а в випадку мультипроцесорності виникає навантаження на шину пам'яті, особливо якщо деталізація блокування висока.
Введення-виведення і планування
Багато реалізацій волокон лежать повністю в області користувача. Як наслідок, переключення контексту між волокнами всередині процесу, є максимально ефективним, бо воно не вимагає ніякої взаємодії з ядром: переключення контексту може бути зроблене локальним збереженням регістрів процесора, що використані у волокні, і завантаженням регістрів наступного волокна, що виконуватиметься. Оскільки планування відбувається в області користувача, політика планування може бути простіше скроєна найефективнішим чином для швидкодії програми загалом.
Проте, використання системних викликів блокування у волокнах може бути проблематичним. Якщо волокно виконує системний виклик блокування, інші волокна процесу не можуть виконуватися, доки системний виклик не відпрацює. Типовим прикладом цієї проблеми є виконання введення-виведення: більшість програм пише у вивід синхронно. Коли операція вводу-виводу розпочалася, системний виклик зроблено, і він не поверне керування, доки операція вводу-виводу не буде завершена. На весь цей час робота всього процесу блокована ядром, процес «стоїть», бо інші волокна процесу не можуть отримати керування.
Загальним рішенням цієї проблеми є забезпечення програмного синхронного інтерфейсу з використанням внутрішнього неблокуючого введення-виведення, так, щоб під час виконання запису-читання інші волокна могли виконуватися. Таке рішення може бути запроваджене для інших блокуючих викликів. Інший спосіб — писати програму без використання синхронного введення-виведення та інших блокуючих системних викликів.
Win32 забезпечує програмний інтерфейс волокон. SunOS 4.x реалізує волокна під назвою (англ. light-weight processes, LWP), відомі також як «зелені нитки». NetBSD 2.x+, і DragonFly BSD також реалізають LWP як нитки (модель 1:1). SunOS від версій 5.2 до 5.8, NetBSD версій від 2 до 4 реалізує дворівневу модель, дозволяючи одному чи більше користувацьких волокон на кожну нитку ядра (модель M: N). SunOS 5.9 і пізніші, а також NetBSD 5 позбавлені підтримки волокон, повернулися до моделі 1:1.
Використання ниток ядра спрощує код програми, ховаючи деякі найскладніші аспекти ниток в ядро. Програміст вже не піклується про планування ниток та явну передачу процесора, код може бути написаний у звичному процедурному стилі, включаючи виклик функцій блокування. Проте, нитки ядра на однопроцесорних системах можуть бути змушені переключити контекст будь-якої миті, що може призвести до стану гонитви і помилок паралелізму, які можуть бути прихованими. На мультипроцесорних системах це може бути ще гостріше, оскільки нитки ядра можуть в дійсності виконуватися на різних процесорах.
Моделі
1:1
Користувацькі нитки моделі 1:1 відповідають одна до одного планувальному об'єктові ядра. Це найпростіша можлива реалізація ниток. В Linux цей підхід реалізує звична бібліотека C (NPTL).
N: M
N: M розкладає N ниток застосунку на M об'єктів ядра, або «віртуальних процесорів». Така реалізація є компромісом між реалізацією ниток рівня ядра («1:1») і рівнем користувача («N:1»). Загалом, ниткова система «N: M» складніша в реалізації і за ядерну, і за користувацьку системи, бо потрібні зміни і в ядрі і з боку користувача. В реалізації m×n, бібліотека ниток відповідальна за планування ниток користувача на можливі об'єкти планування; це робить переключення контексту ниток дуже швидким, бо не потрібні системні виклики. Проте, це збільшує складність і ймовірність інверсії пріоритетів, а також вимагає екстенсивної (і дорогої) координації між планувальниками ядра та користувача.
N:1
Модель N:1 означає відобразити всі нитки застосунку на єдиний планувальний об'єкт ядра; оскільки ядро нічого не знає про користувацькі нитки, фактично це є реалізація волокон. При такому підході переключення контексту може бути зроблене дуже швидко і, на додаток, воно може бути реалізоване на простому ядрі без підтримки ниток. Один з найбільших недоліків, це те, що неможливо отримати користь від апаратного пришвидшення на багатоядерних процесорах або багатопроцесорних комп'ютерах: у цій моделі неможливо запустити більше однієї нитки одночасно.
Реалізації
Існує багато різних (і несумісних) реалізацій ниток, включаючи реалізації на рівні ядра і на рівні користувача.
Звісно, волокна можуть бути реалізовані поза підтримкою з боку операційної системи, хоча деякі операційні системи або бібліотеки забезпечують їхню явну підтримку. Наприклад, Microsoft Windows (Windows NT 3.51 SP3 і пізніші) підтримують програмний інтерфейс волокон для застосунків, тож за бажання, можна спробувати підвищити продуктивність програми самому, замість покладатися на планувальник ядра (який може бути не налаштований для застосунку). Прикладом може бути планувальник користувацького режиму в Microsoft SQL Server 2000, який працює в просторі волокон.
Приклади реалізацій рівня ядра
- в BSD-системах
- (в BSD)
- для Linux, як реалізація ниток стандарту POSIX pthread. Існує порт бібліотеки на Windows
- Apple версії 2.0 і пізніші, використовують вбудовані в Mac OS 8.6 і пізніших, модифікованих під них.
Приклади реалізації рівня користувача
- Apple Inc.
- (включає API для кооперативної багатонитковості)
- (включає втілення користувацьких волокон)
Приклади гібридних реалізацій
- використовується бібліотекою рідних-POSIX ниток NetBSD (модель N: M на противагу моделі ядра 1:1 та моделі користувацького простору)
- Marcel з проекту .
Реалізація в Windows
реалізує інтерфейс ниток двома способами
- через функція CreateThread і споріднені (варіант: AfxBeginThread і споріднені)
- через функції _beginthread, _beginthreadex і споріднені
Перша реалізація є дефектною і призводить до витоку пам'яті при використанні в обробниках ниток старих функцій стандартної бібліотеки.
Існують реалізації стандарту POSIX pthread для Windows як надбудова над інтерфейсом _beginthread.
Виноски
- CreateFiber, MSDN
- Solaris whitepapers
- CreateThread Function
- . Архів оригіналу за 26 серпня 2008. Процитовано 16 жовтня 2008.
Див. також
Посилання
- Введение в многопоточность
- Article «» by
- Ars Technica article about multithreading, etc
- Answers to frequently asked questions for comp.programming.threads
- The C10K problem
- Article «The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software» by
- Article «» by
- POSIX threads explained by
- Multithreading in the Solaris Operating Environment
Це незавершена стаття про операційні системи. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Ne plutati z Potik programuvannya Potik angl thread abo povnishe potik vikonannya angl thread of execution chasto zastosovuyutsya nazvi nitka nitka vikonannya ta anglicizm tred v informatici tak nazivayetsya sposib programi rozdiliti sebe na dvi chi bilshe paralelni zadachi Realizaciya potokiv ta procesiv vidriznyayutsya v riznih operacijnih sistemah ale zagalom potik mistitsya vseredini procesu i rizni potoki odnogo procesu spilno rozpodilyayut deyaki resursi u toj chas yak rizni procesi resursi ne rozpodilyayut Proces z dvoma potokami vikonannya U sistemah z odnim procesorom bagatopotokovist realizuyetsya zagalom podilom chasu vikonannya kvanti chasu duzhe podibno do paralelnogo vikonannya bagatoh zadach procesor poslidovno pereklyuchayetsya mizh riznimi potokami Ce pereklyuchennya kontekstu vidbuvayetsya nastilki shvidko sho v kincevogo koristuvacha stvoryuyetsya ilyuziya odnochasnogo vikonannya Na bagatoprocesornih chi na bagatoyadernih sistemah robota potokiv zdijsnyuyetsya spravdi odnochasno oskilki rizni potoki i procesi vikonuyutsya bukvalno odnochasno riznimi procesorami abo yadrami procesora Osoblivosti kvantuvannya v operacijnij sistemi Windows rozglyanuto v statti Kvant Windows Bagato suchasnih operacijnih sistem pryamo pidtrimuyut kvantuvannya chasu i bagatoprocesornu robotu potokiv cherez planuvalnik procesiv Yadro operacijnoyi sistemi dozvolyaye programistu manipulyuvati potokami cherez interfejs sistemnih viklikiv Deyaki realizaciyi viklikayut potoki yadra oskilki en angl lightweight process LWP ye specialnim tipom potokiv yadra sho rozpodilyayut deyaki stani ta informaciyu Poza tim programa mozhe emulyuvati robotu potokiv vikoristovuyuchi tajmer signali abo inshi metodi shob perervati vlasne vikonannya i poslidovno vikonuvati rizni zadachi vlasnim kvantuvannyam chasu Takij sposib inodi zvetsya potokami koristuvackogo prostoru angl user space threads abo voloknami Zauvazhennya shodo terminologiyi Anglo ukrayinskij tlumachnij slovnik z obchislyuvalnoyi tehniki internetu i programuvannya Kiyiv vidavnictvo SoftPres 2005 vidanij za pidtrimki kompaniyi Microsoft podaye pereklad originalnogo terminu thread ukrayinskoyu movoyu yak potik nitka tred st 494 Porivnyannya potokiv z procesamiPotoki vidriznyayutsya vid tradicijnih procesiv bagatozadachnih operacijnih sistem v tomu sho procesi na zagal nezalezhni dublyuyut znachnu chastinu informaciyi pro stan mayut okremij adresnij prostir vzayemodiyut tilki cherez sistemni mizhprocesorni mehanizmi komunikacij Potoki vseredini procesu z inshoyi storoni rozpodilyayut informaciyu pro stan procesu i pryamo dostupayutsya do spilnoyi pam yati ta inshih resursiv Pereklyuchennya kontekstu mizh potokami procesu na zagal shvidshe nizh pereklyuchennya kontekstu mizh procesami Opisuyuchi situaciyu taki sistemi yak Windows NT ta OS 2 kazhut sho mayut deshevi potoki ta dorogi procesi v inshih operacijnih sistemah situaciya ne duzhe vidminna Potoki vimagayut bilshoyi kvalifikaciyi programistivBagatopotokovist ye populyarnoyu modellyu programuvannya i vikonannya bo dozvolyaye bagatom potokam isnuvati vseredini kontekstu odnogo procesu rozpodilyayuchi resursi procesu ale vikonuyuchis nezalezhno Potokova model programuvannya zabezpechuye rozrobnikam korisni abstrakciyi dlya paralelnogo vikonannya Prote mozhlivo najcikavishe zastosuvannya tehnologiyi u vipadku koli odin proces vikonuyetsya na bagatoprocesornij sistemi Cya perevaga bagatopotokovih program dozvolyaye yim skorishe vikonuvatisya na komp yuterah z kilkoma procesorami procesorami z kilkoma yadrami abo na klasteri mashin bo potoki programi prirodno nadayut sobi mozhlivist spravdi paralelnogo vikonannya U takomu vipadku programist maye buti osoblivo oberezhnim shob uniknuti stanu gonitvi ta inshih neperedbachenih povedinok Dlya zabezpechennya korektnoyi roboti z danimi potoki chasto potrebuyut proceduri dostupu do danih v pevnomu poryadku Potoki takozh vimagayut atomarnih operacij chasto realizovanih z vikoristannyam semaforiv shob uniknuti odnochasnoyi neuzgodzhenoyi modifikaciyi danih abo yihnogo chitannya u toj chas yak proces modifikuye dani Nedbale povodzhennya z takimi primitivami mozhe prizvesti do vzayemnogo blokuvannya Planuvalniki operacijnih sistem pereklyuchayut potoki odnim z dvoh mozhlivih sposobiv Zapobizhna abo vitisnyayucha bagatopotokovist zagalom rozglyadayetsya yak krashij pidhid bo vona dozvolyaye operacijnij sistemi viznachiti koli mozhe statisya peremikannya kontekstu Na protivagu kooperativna bagatopotokovist pokladayetsya na sami potoki shob voni peredali kontrol vikonannya na tochkah zupinu Ce mozhe stvoriti problemi yaksho nit chekaye na resurs yakij stav nedostupnim Nedolik zapobizhnoyi bagatopotokovosti v tomu sho peremikannya kontekstu mozhe statisya v nedorechnu mit sprichinyayuchi abo inshi pogani efekti yakih mozhna uniknuti v kooperativnij bagatopotokovosti Tradicijno bazove komp yuterne aparatne zabezpechennya ne nadavalo bagato pidtrimki bagatonitevosti oskilki pereklyuchennya mizh nityami zagalom ye vzhe skorishoyu proceduroyu porivnyano z pereklyuchennyam kontekstu procesiv Procesori vbudovanih sistem sho mayut bilshi vimogi do povedinki v realnomu chasi mozhut mati aparatnu pidtrimku bagatonitevosti zmenshennyam chasu peremikannya mozhlivo rozmishuyuchi vidilenij blok registriv dlya kozhnoyi niti zamist togo shob zberigati chitati zagalni registri Na kinci 1990 h stala vidoma ideya vikonannya instrukcij z riznih nitej odnochasno ce zvetsya odnochasnoyu bagatonitevostyu Cya mozhlivist bula vvedena v procesori Intel Pentium 4 pid im yam Hyper threading Procesi nitki i voloknaProces ye najvazhchim ob yektom dlya planuvalnika yadra operacijnoyi sistemi Vlasni resursi procesu rozmisheni operacijnoyu sistemoyu Resursi vklyuchayut pam yat vidkriti fajli ta pristroyi soketi ta vikna Procesi ne rozdilyayut z kimos adresnij prostir chi zalucheni fajli za vinyatkom yavnih metodiv takih yak uspadkuvannya fajliv chi segmentiv spilnoyi pam yati abo robota z fajlami v rezhimi spilnogo dostupu Tipovo procesi zapobizhno bagatozadachni Ale Windows 3 1 i stari versiyi Mac OS vikoristovuvali kooperativnu bagatozadachnist Nitka ye najlegshim ob yektom dlya planuvalnika yadra Shonajmenshe odna nitka isnuye vseredini kozhnogo procesu Yaksho v procesi spivisnuyut bagato nitok voni rozpodilyayut odnu pam yat i fajlovi resursi Nitki mayut zapobizhnu bagatozadachnist yaksho planuvalnik procesiv operacijnoyi sistemi zapobizhnij Nitki ne mayut svoyih vlasnih resursiv za vinyatkom steku kopiyi registriv vklyuchno z lichilnikom zadach i vlasne nitkovim zberigannyam danih yaksho taka mozhlivist zabezpechuyetsya V deyakih situaciyah ye riznicya mizh nitkami yadra ta nitkami koristuvacha pershi upravlyayutsya i planuyutsya yadrom drugi upravlyayutsya i planuyutsya v prostori koristuvacha V cij statti termin nitka vikoristovuyetsya dlya poznachennya ponyattya nitka yadra a ponyattya volokno angl fiber oznachaye nitka koristuvacha Volokna mayut kooperativne planuvannya pracyuyuche volokno maye yavno zupinitisya i peredati upravlinnya inshomu voloknu Volokno mozhe buti zapusheno bud yakoyu nitkoyu v odnomu procesi Problemi nitej ta volokonParalelizm ta strukturi danih Dokladnishe Paralelizm informatika ta Strukturi danih Nitki odnogo procesu rozpodilyayut odin adresnij prostir Ce dozvolyaye paralelno pracyuyuchomu kodu buti tisno vzayemopov yazanim i zruchno obminyuvatisya danimi bez zaluchennya skladnih metodiv mizhprocesornogo obminu Ale dostupni vsim nitkam navit prosti strukturi danih stayut vrazlivi do pomilok tipu stanu gonitvi yaksho voni potrebuyut bilshe odniyeyi mashinnoyi komandi pid chas prisvoyennya novih znachen dvi nitki mozhut odnochasno sprobuvati zminiti znachennya strukturi danih i vnaslidok otrimati zovsim ne te sho bazhalosya Taki pomilki buvaye duzhe vazhko vipraviti i izolyuvati Shob zapobigti comu programnij interfejs nitok proponuye metodi sinhronizaciyi taki yak m yuteks mutex dlya blokuvannya struktur danih pid chas dostupu pri paralelnomu vikonanni Na odnoprocesornih sistemah nitka sho zapitala zakritij m yuteks maye perejti v pasivnij sonnij rezhim i planuvalnik pereklyuchaye kontekst inshoyi nitki V bagatoprocesornih sistemah nitka za vidsutnosti inshih konkuruyuchih nitok vikonannya na procesori stane zapituvati m yuteks doki toj ne zvilnitsya Obidva ci sposobi zle vplivayut na produktivnist a v vipadku multiprocesornosti vinikaye navantazhennya na shinu pam yati osoblivo yaksho detalizaciya blokuvannya visoka Vvedennya vivedennya i planuvannya Bagato realizacij volokon lezhat povnistyu v oblasti koristuvacha Yak naslidok pereklyuchennya kontekstu mizh voloknami vseredini procesu ye maksimalno efektivnim bo vono ne vimagaye niyakoyi vzayemodiyi z yadrom pereklyuchennya kontekstu mozhe buti zroblene lokalnim zberezhennyam registriv procesora sho vikoristani u volokni i zavantazhennyam registriv nastupnogo volokna sho vikonuvatimetsya Oskilki planuvannya vidbuvayetsya v oblasti koristuvacha politika planuvannya mozhe buti prostishe skroyena najefektivnishim chinom dlya shvidkodiyi programi zagalom Prote vikoristannya sistemnih viklikiv blokuvannya u voloknah mozhe buti problematichnim Yaksho volokno vikonuye sistemnij viklik blokuvannya inshi volokna procesu ne mozhut vikonuvatisya doki sistemnij viklik ne vidpracyuye Tipovim prikladom ciyeyi problemi ye vikonannya vvedennya vivedennya bilshist program pishe u vivid sinhronno Koli operaciya vvodu vivodu rozpochalasya sistemnij viklik zrobleno i vin ne poverne keruvannya doki operaciya vvodu vivodu ne bude zavershena Na ves cej chas robota vsogo procesu blokovana yadrom proces stoyit bo inshi volokna procesu ne mozhut otrimati keruvannya Zagalnim rishennyam ciyeyi problemi ye zabezpechennya programnogo sinhronnogo interfejsu z vikoristannyam vnutrishnogo neblokuyuchogo vvedennya vivedennya tak shob pid chas vikonannya zapisu chitannya inshi volokna mogli vikonuvatisya Take rishennya mozhe buti zaprovadzhene dlya inshih blokuyuchih viklikiv Inshij sposib pisati programu bez vikoristannya sinhronnogo vvedennya vivedennya ta inshih blokuyuchih sistemnih viklikiv Win32 zabezpechuye programnij interfejs volokon SunOS 4 x realizuye volokna pid nazvoyu angl light weight processes LWP vidomi takozh yak zeleni nitki NetBSD 2 x i DragonFly BSD takozh realizayut LWP yak nitki model 1 1 SunOS vid versij 5 2 do 5 8 NetBSD versij vid 2 do 4 realizuye dvorivnevu model dozvolyayuchi odnomu chi bilshe koristuvackih volokon na kozhnu nitku yadra model M N SunOS 5 9 i piznishi a takozh NetBSD 5 pozbavleni pidtrimki volokon povernulisya do modeli 1 1 Vikoristannya nitok yadra sproshuye kod programi hovayuchi deyaki najskladnishi aspekti nitok v yadro Programist vzhe ne pikluyetsya pro planuvannya nitok ta yavnu peredachu procesora kod mozhe buti napisanij u zvichnomu procedurnomu stili vklyuchayuchi viklik funkcij blokuvannya Prote nitki yadra na odnoprocesornih sistemah mozhut buti zmusheni pereklyuchiti kontekst bud yakoyi miti sho mozhe prizvesti do stanu gonitvi i pomilok paralelizmu yaki mozhut buti prihovanimi Na multiprocesornih sistemah ce mozhe buti she gostrishe oskilki nitki yadra mozhut v dijsnosti vikonuvatisya na riznih procesorah Modeli1 1 Koristuvacki nitki modeli 1 1 vidpovidayut odna do odnogo planuvalnomu ob yektovi yadra Ce najprostisha mozhliva realizaciya nitok V Linux cej pidhid realizuye zvichna biblioteka C NPTL N M N M rozkladaye N nitok zastosunku na M ob yektiv yadra abo virtualnih procesoriv Taka realizaciya ye kompromisom mizh realizaciyeyu nitok rivnya yadra 1 1 i rivnem koristuvacha N 1 Zagalom nitkova sistema N M skladnisha v realizaciyi i za yadernu i za koristuvacku sistemi bo potribni zmini i v yadri i z boku koristuvacha V realizaciyi m n biblioteka nitok vidpovidalna za planuvannya nitok koristuvacha na mozhlivi ob yekti planuvannya ce robit pereklyuchennya kontekstu nitok duzhe shvidkim bo ne potribni sistemni vikliki Prote ce zbilshuye skladnist i jmovirnist inversiyi prioritetiv a takozh vimagaye ekstensivnoyi i dorogoyi koordinaciyi mizh planuvalnikami yadra ta koristuvacha N 1 Model N 1 oznachaye vidobraziti vsi nitki zastosunku na yedinij planuvalnij ob yekt yadra oskilki yadro nichogo ne znaye pro koristuvacki nitki faktichno ce ye realizaciya volokon Pri takomu pidhodi pereklyuchennya kontekstu mozhe buti zroblene duzhe shvidko i na dodatok vono mozhe buti realizovane na prostomu yadri bez pidtrimki nitok Odin z najbilshih nedolikiv ce te sho nemozhlivo otrimati korist vid aparatnogo prishvidshennya na bagatoyadernih procesorah abo bagatoprocesornih komp yuterah u cij modeli nemozhlivo zapustiti bilshe odniyeyi nitki odnochasno RealizaciyiIsnuye bagato riznih i nesumisnih realizacij nitok vklyuchayuchi realizaciyi na rivni yadra i na rivni koristuvacha Zvisno volokna mozhut buti realizovani poza pidtrimkoyu z boku operacijnoyi sistemi hocha deyaki operacijni sistemi abo biblioteki zabezpechuyut yihnyu yavnu pidtrimku Napriklad Microsoft Windows Windows NT 3 51 SP3 i piznishi pidtrimuyut programnij interfejs volokon dlya zastosunkiv tozh za bazhannya mozhna sprobuvati pidvishiti produktivnist programi samomu zamist pokladatisya na planuvalnik yadra yakij mozhe buti ne nalashtovanij dlya zastosunku Prikladom mozhe buti planuvalnik koristuvackogo rezhimu v Microsoft SQL Server 2000 yakij pracyuye v prostori volokon Prikladi realizacij rivnya yadra v BSD sistemah v BSD dlya Linux yak realizaciya nitok standartu POSIX pthread Isnuye port biblioteki na Windows Apple versiyi 2 0 i piznishi vikoristovuyut vbudovani v Mac OS 8 6 i piznishih modifikovanih pid nih Prikladi realizaciyi rivnya koristuvacha Apple Inc vklyuchaye API dlya kooperativnoyi bagatonitkovosti vklyuchaye vtilennya koristuvackih volokon Prikladi gibridnih realizacij vikoristovuyetsya bibliotekoyu ridnih POSIX nitok NetBSD model N M na protivagu modeli yadra 1 1 ta modeli koristuvackogo prostoru Marcel z proektu Realizaciya v Windows Dokladnishe Nitki u Windows Visual C C realizuye interfejs nitok dvoma sposobami cherez funkciya CreateThread i sporidneni variant AfxBeginThread i sporidneni cherez funkciyi beginthread beginthreadex i sporidneni Persha realizaciya ye defektnoyu i prizvodit do vitoku pam yati pri vikoristanni v obrobnikah nitok starih funkcij standartnoyi biblioteki Isnuyut realizaciyi standartu POSIX pthread dlya Windows yak nadbudova nad interfejsom beginthread VinoskiCreateFiber MSDN Solaris whitepapers CreateThread Function Arhiv originalu za 26 serpnya 2008 Procitovano 16 zhovtnya 2008 Div takozhProces informatika M yuteks Semafor programuvannya Vzayemodiya mizh procesami Lokalna pam yat nitok Volokno programuvannya PosilannyaVvedenie v mnogopotochnost Article by Ars Technica article about multithreading etc Answers to frequently asked questions for comp programming threads The C10K problem Article The Free Lunch Is Over A Fundamental Turn Toward Concurrency in Software by Article by POSIX threads explained by Multithreading in the Solaris Operating Environment Ce nezavershena stattya pro operacijni sistemi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi