C Thread - това ли е?

Какво е общото с тениската и компютърната програма? И двете се състоят от много потоци! Докато конците в тениска държат плат във формата на едно платно, C нишката (буквално "нишки" или "нишки") на операционната система комбинира всички програми, за да изпълнява едновременно последователни или паралелни действия. Всеки поток в програмата идентифицира процеса, който се случва, когато системата (системната нишка С) го поиска. Той оптимизира работата на такова сложно устройство като персонален компютър и влияе положително на неговата производителност и производителност.


Дефиниция

В Компютърни науки от нишки, или изпълнителна нишка, е най-малката последователност от команди, които се управляват от независим планировчик, който обикновено е неделима част от операционната система.
За потоците обикновено се дава определен приоритет, което означава, че някои потоци имат приоритет пред други. След като процесорът завърши обработката на една нишка, той може да стартира следващия, чакащ за опашката. Като правило, очакването не надвишава няколко милисекунди. Компютърни програми, осъществяващи "многопоточна обработка", могат да изпълняват множество потоци наведнъж. Най-модерната поддръжка на операционна система Thread от системното ниво. Това означава, че когато една програма се опитва да отнеме всички процесорни ресурси, системата превключва на други програми принудително и принуждава програмата за поддръжка на процесора да споделя ресурси равномерно.


Терминът "поток" (от Thread) може също да се отнася до серия от свързанионлайн дискусионни съобщения. Уеб бюлетинните плотове се състоят от много теми или клонове. Отговорите, изпратени в отговор на оригиналната публикация, са част от една и съща тема. В поток от електронна поща нишката може да се отнася до серия от отговори под формата на команди "назад" и "напред", отнасящи се до определено съобщение, и да структурира дървото за разговори.

Windows с многонишков C

В компютърното програмиране еднократната обработка е обработка на една команда едновременно. Противоположна единична резба - многонишковост. И двата термина са широко използвани в общността на функционалното програмиране. Многопоточността е подобна на многозадачността, но ви позволява да работите с няколко потока едновременно, но не и с няколко процеса. Тъй като потоците са по-малки и се контролират от по-прости инструкции, многопоточността може да се появи и в рамките на процесите.

Примери за работа на инструмента C Задача с резба

Операционната система с многонишкова обработка може да програмира. Многопоточността може да попречи на програмата да се провали и да предотврати неизправност на компютъра. Тъй като всеки поток се обработва отделно, грешка в един от тях не може да наруши работата на компютъра. По този начин многопоточността може да доведе до по-малко катастрофи в работата на операционната система като цяло.

Многозадачност

Многозадачността обработва множество задачи в паралелен режим и също така описва принципите на компютъра. Процесорът може да обработва няколко процеса едновременно с абсолютна точност. Процесорът обаче изпълнява определеноперации. Основните задачи на операционната система, като копирането на файлове, не позволяват на потребителя да изпълнява други задачи (например отваряне или затваряне на прозорци). Съвременните операционни системи включват пълна поддръжка за многозадачност - множество софтуерни решения могат да работят едновременно, без да се намесват функционалностите на другите. Многозадачността също така увеличава стабилността на вашия компютър. Технологията се различава в зависимост от операционната система, но най-често потокът е компонент на процеса. В същото време няколко потока могат да съществуват в един процес, като изпълняват и споделят ресурси. По-специално, поточните потоци на C Thread използват общи изпълними код и стойности на променливи по всяко време.

може да blockSettings3 = {blockId: "R-A-70350-3", renderTo: "yandex_rtb_R-A-70350-3", async:! 0};

if (document.cookie.indexOf ("abmatch =") & gt; = 0) {
blockSettings3 = {blockId: "RA-70350-3", renderTo: "yandex_rtb_R-A-70350- 3 ", statId: 70350async: 0};
}

Функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya .Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("скрипт")се изпълнява в паралелен режим, като всеки процесор или ядро ​​изпълнява отделен поток в даден момент.

Видове потоци

Планиращите процеси в повечето съвременни операционни системи пряко подкрепят както временното, така и многопроцесорното поточно предаване, докато ядрото на операционната система позволява на разработчиците да управляват потоците чрез предоставяне на необходимите функции чрез интерфейса на системните обаждания. Някои резбовани реализации се наричат ​​нишки на ядрото, докато светлинните процеси (LWP) са тип поток, който има същото състояние на информацията. Също така, софтуерни решениямогат да имат потребителски потоци, когато се използват с таймери за таймер С, сигнали или други методи за прекъсване на собственото си изпълнение чрез извършване на вид временна ad hoc реклама.

Потоци и процеси: разлики

Потоците се различават от класическите процеси на многозадачната ОС със следните характеристики:
  • процесите обикновено са независими, докато потоците съществуват като подмножество на процеса;
  • процесите носят много повече информация от потоците;
  • процесите имат специално адресно пространство;
  • процесите взаимодействат само чрез механизми за системна комуникация;
  • превключването на контекста между нишките в процеса е по-бързо от превключването на контекста между процесите.
  • Превантивно планиране и планиране на сътрудничество

    В многопотребителските операционни системи превантивната многонишкова обработка е по-широко използван подход за контрол на времето за изпълнение чрез превключване на контекста. Въпреки това, превантивното планиране може да доведе до неконтролирани програмисти за приоритизиране и неуспехи. Напротив, споделената многопоточна обработка се базира на нишки, за да откаже контрол върху изпълнението. Това може да създаде проблеми, ако споделеният многопоточен поток е блокиран от изчакване на ресурса.

    Развитие на технологиите

    До началото на 2000 г. повечето настолни компютри имаха само един едноядрен процесор, който не поддържаше хардуерните потоци. През 2002 г. Intel осъществи едновременната многопоточна поддръжка на процесораPentium 4, наречен Hyper-Threading. През 2005 г. бяха въведени двуядрен процесор Pentium D и двуядрен процесор AMD Athlon 64 X2. Процесорите в интегрирани системи с по-високи изисквания за операции в реално време са в състояние да поддържат многонишково редуване, да намаляват времето за превключване и да използват специален файл за регистър за всяка нишка.

    Модели

    Да изброим основните модели на реализация. 1: 1 (ниво на ядрото) - нишките, създадени от потребителя в ядрото, са най-простата възможна реализация на нишки. OS /2 и Win32 използват този подход от самото начало, докато в Linux библиотеката, C Thread се присъединява към този подход чрез NPTL или по-стари LinuxThreads. Този подход се използва и от Solaris, NetBSD, FreeBSD, macOS и iOS. N: 1 (интерфейс на потока) - този модел приема, че всички потоци на ниво приложение са съпоставени с един целеви обект на нивото на ядрото. С този подход контекстният превключвател може да бъде изпълнен много бързо и освен това може дори да бъде реализиран на тези ядра, които не поддържат поточна обработка. Въпреки това, един от основните недостатъци е, че той не се ползва от хардуерно ускорение на многонишкови процесори или компютри. Например: ако една от нишките трябва да бъде изпълнена, когато I /O заявката, целият процес е блокиран и стриймингът не може да се използва. Изключението GNU Portable C Thread се използва като обработка на нишки на ниво потребител. M: N (хибридно изпълнение) - моделът представлява определен брой приложения за някои N клетки на ядрото или "виртуални процесори". Това е компромисмежду нишките на нивото на ядрото ("1: 1") и потребителя ("N: 1"). Системите за "M: N" са по-сложни, защото трябва да промените кода на ядрото и потребителския код. При реализацията на М: N, библиотеката за обработка на нишки е отговорна за планиране на потоци в наличните планирани обекти. Това прави контекста най-оптимален, тъй като избягва системните повиквания. Това обаче увеличава сложността и вероятността от инверсия, както и под-оптималното планиране без голяма (и скъпа) координация между планиращата среда на потребителя и планировчика на ядрото.
    Примери за хибридна реализация са активирането на планировчика, използвано от вградената реализация на POSIX NetBSD библиотеката (за модела M: N, за разлика от модела за изпълнение на ядрото 1: 1 или модела на пространствения потребител). Леки процеси, използвани от по-стари версии на операционната система Solaris (инструментариум Std Thread C).

    Поддръжка на програмния език

    Много официални системи поддържат функционалността на потока. Изпълнението C и C ++ въвеждат тази технология и осигуряват достъп до техните собствени API интерфейси за операционната система. Някои езици за програмиране на високо ниво, като Java, Python и .NET Framework, насочват разработчиците чрез абстракция на специфични разлики в изпълнението на нишки в средата за изпълнение. Други езикови разширения също се опитват да абстрахират концепцията за паралелизъм и стрийминг от разработчика. Някои езици са предназначени за последователен паралелизъм с помощта на графични процесори.
    Няколко интерпретирани езикаима реализации, които поддържат стрийминг и паралелна обработка, но не и паралелно изпълнение на нишки поради глобалното блокиране на интерпретатора (GIL). GIL е взаимно изключващо се блокиране от интерпретатора, което може да предотврати едновременното тълкуване на програмен код за две или повече нишки едновременно, което ограничава паралелизма в многоядрените системи. Други реализации на интерпретирани програмни езици, като Tcl, използват разширението Thread sleep C.Това избягва максималния GIL лимит, използвайки модел, където съдържанието и кодът трябва да бъдат изрично "разпределени" между потоците. Езици за програмиране, ориентирани към събития, като разширения Verilog и Thread sleep C, имат друг поток, който поддържа максималната сума на хардуерната симулация.

    Практична многонишкова обработка

    Многопоточни библиотеки инициират извикване на функция за генериране на нов поток, който приема функционалната стойност като параметър. След това се създава нов паралелен поток и се стартира обработката на стартираната функция с последващо връщане. Езиците за програмиране съдържат библиотеки с нишки, които включват глобални функции за синхронизация, които ви позволяват да създавате и успешно да изпълнявате многопоточност без грешка, като използвате мутекс, променливи, критични дялове, монитори и други типове синхронизация.

    Свързани публикации