C Thread - je to čo?

Čo je spoločné s tričkom a počítačovým programom? Obidva z nich pozostávajú z mnohých prúdov! Kým drží závity košele tkaniny v jednom plátne, C Thread (doslova - "niť" alebo "flow"), operačný systém integruje všetky aplikácie za účelom vykonania sériových alebo paralelných činností súčasne. Každý prúd v programe identifikuje proces, ktorý sa vyskytuje vtedy, keď ho systém požiada (systémový závit C). Optimalizuje prácu takéhoto zložitého zariadenia ako osobného počítača a pozitívne ovplyvňuje jeho výkon a výkon.


Definícia

V počítači so závitom, alebo tok prevedenie je najmenší sekvencia príkazov, ktoré sú spravované nezávislou plánovač, ktorý je zvyčajne súčasťou operačného systému.
Pri prúdoch sa obvykle uvádza určitá priorita, čo znamená, že niektoré toky majú prednosť pred ostatnými. Keď procesor dokončí spracovanie jedného vlákna, môže spustiť ďalší, čakajúc na frontu. Zvyčajne očakávanie nepresahuje niekoľko milisekúnd. Počítačové programy implementujúce "multithreading" môžu vykonávať viacero streamov naraz. Väčšina modernej podpory operačného systému Závit zo systémovej úrovne. To znamená, že keď sa jeden program pokúša odobrať všetky zdroje procesora, systém sa násilne prepína na iné programy a prinúti program podpory procesora zdieľať zdroje rovnomerne.


Pojem "prúd" (z vlákna) sa môže vzťahovať aj na sériu súvisiacichonline diskusné správy. Webové tabule sa skladajú z mnohých tém alebo pobočiek. Odpovede zaslané v odpovedi na pôvodné príspevky sú súčasťou toho istého vlákna. V prúde e-mailu sa môže vlákno odvolávať na sériu odpovedí vo forme príkazov "dozadu" a "dopredu" týkajúcich sa konkrétnej správy a na štruktúrovanie stromu konverzácií.

Windows s viacvláknovými závitmi

Pri programovaní počítača je jedno-závitové spracovanie naraz spracovanie jedného príkazu. Oproti jednodávkovému závitovaniu - multithreading. Obidva termíny sú široko používané v komunite funkčného programovania. Multithreading je podobný multitaskingu, ale umožňuje spracovávať viac vlákien naraz, ale nie niekoľko procesov. Vzhľadom na to, že toky sú menšie a riadené jednoduchšími inštrukciami, multithreading sa môže vyskytnúť aj v rámci procesov.

Príklady činnosti nástroja C Úloha závitu

Viacnásobný operačný systém môže programovať. Multithreading môže zabrániť tomu, aby program zlyhal a zabránil vám poruche v počítači. Pretože každý prúd je spracovaný samostatne, chyba v jednom z nich nie je schopná narušiť počítač. Multithreading teda môže viesť k menšiemu počtu nehôd v prevádzke operačného systému ako celku.

Multitasking

Multitasking pracuje s viacerými úlohami v paralelnom režime a tiež popisuje princípy počítača. Procesor dokáže spracovať niekoľko procesov naraz s absolútnou presnosťou. Procesor však vykonáva určitúoperácie. Hlavné úlohy operačného systému, napríklad kopírovanie súborov, neumožnili používateľovi vykonávať iné úlohy (napríklad otváranie alebo zatváranie okien). Moderné operačné systémy zahŕňajú plnú podporu pre multitasking - viacero softvérových riešení môže fungovať súčasne bez toho, aby sa narušovali vzájomné funkcie. Multitasking tiež zvyšuje stabilitu vášho počítača. Technológia sa líši v závislosti od operačného systému, ale najčastejšie tok je súčasťou procesu. Súčasne môže existovať niekoľko prúdov v jednom procese, pri výkone a zdieľaní zdrojov. Najmä procesné toky C Thread používajú spoločný spustiteľný kód a hodnoty premenných v ľubovoľnom čase.

var blockSettings3 = {blockId: "R-A-70350-3", renderTo "yandex_rtb_R-A-70350-3", async:! 0};

, ak (document.cookie.indexOf ("abmatch =") väčšie alebo rovné 0) {
blockSettings3 = {blockId: "RA-70350-3", renderTo "yandex_rtb_R-A-70350- 3 ", stav: 70350async: 0};
}

! Funkcie (a, b, c, d, e) {a [c] = a [c] || [], sa [C] .push (funkcia () {Ya .Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scenár")sa vykonáva paralelne, každý procesor jadro alebo vykonať jeden stream súčasne.

Druhy toky

plánovacie procesy väčšiny moderných operačných systémov priamo podporujú obaja dočasné a streamovanie spracovanie viacerými procesormi, zatiaľ čo jadro operačného systému umožňuje vývojárom riadiť tok poskytnutie požadovanej funkcie pomocou systémového volania. Niektoré implementácia streaming nazýva jadro flow, zatiaľ čo ľahké procesy (LBP) - druh prúdu, ktorý má rovnaké informácie o stave. Tiež softvérové ​​riešeniamôžu mať tok používateľského priestoru, keď sa používajú s timermi, signálmi alebo inými metódami Timer C na prerušenie vlastného vykonávania vykonaním určitého druhu dočasnej reklamy ad hoc.

Prúdy a procesy: rozdiely

Prúdy sa líšia od klasických procesov systému multitasking s nasledujúcimi charakteristikami:
  • procesy sú zvyčajne nezávislé, zatiaľ čo toky existujú ako podskupina procesu;
  • procesy prinášajú oveľa viac informácií ako toky;
  • procesy majú vyhradený priestor pre adresy;
  • procesy interagujú iba prostredníctvom mechanizmov systémovej komunikácie;
  • prepínanie kontextu medzi vláknami v procese je rýchlejšie ako prepínanie kontextu medzi procesmi.
    Preventívne plánovanie a spolupráca
    Vo viacúčelových operačných systémoch je preventívny multithreading široko používaným prístupom k riadeniu času implementácie prepínaním kontextu. Napriek tomu môže preventívne plánovanie viesť k nekontrolovaným programátorom prioritizácie a zlyhaní. Naopak, zdieľané multithreading je založené na vláknoch, ktoré odmietajú kontrolu vykonávania. To môže spôsobiť problémy, ak je zdieľaný viacvláknový tok zablokovaný čakaním na zdroj.

    Vývoj technológie

    Až do začiatku roka 2000 väčšina stolných počítačov mala iba jeden jednojadrový procesor, ktorý nepodporoval hardvérové ​​toky. V roku 2002 spoločnosť Intel implementovala simultánnu podporu viacerých reklám na procesorePentium 4, ktorý sa nazýva Hyper-Threading. V roku 2005 boli predstavené dvojjadrové procesory Pentium D a dvojjadrové procesory AMD Athlon 64 X2. Procesory v integrovaných systémoch s vyššími požiadavkami na operácie v reálnom čase dokážu podporiť viacnásobné spracovanie, skrátiť čas prepínania a použiť špeciálny súbor registra pre každú niť.

    Modely

    Vymenujme hlavné modely realizácie. 1: 1 (tok úrovne jadra) - vlákna vytvorené používateľom v jadre sú najjednoduchšou možnou implementáciou vlákien. OS /2 a Win32 používajú tento prístup od začiatku, zatiaľ čo v knižnici Linux, C Thread join implementuje tento prístup prostredníctvom NPTL alebo starších LinuxThreads. Tento prístup využívajú aj systémy Solaris, NetBSD, FreeBSD, macOS a iOS. N: 1 (rozhranie toku) - tento model predpokladá, že všetky toky na úrovni aplikácie sú mapované na jeden cieľový objekt jadra. S týmto prístupom môže byť kontextový prepínač vykonaný veľmi rýchlo a navyše ho možno dokonca implementovať na tie jadrá, ktoré nepodporujú spracovanie prúdu. Jedným z hlavných nedostatkov je však to, že z procesov s viacvláknovými procesormi alebo počítačmi nie je prínosom hardvérová akcelerácia. Napríklad: ak sa jedna z vlákien musí vykonať pri požiadavke I /O, celý proces je zablokovaný a streaming sa nedá použiť. Výnimka programu GNU Portable C Thread sa používa ako spracovanie vlákien na úrovni používateľa. M: N (hybridná implementácia) - model predstavuje určitý počet aplikačných prúdov pre niektoré bunky jadra N alebo "virtuálne procesory". Ide o kompromismedzi vláknami úrovne jadra ("1: 1") a používateľom ("N: 1"). Streamovacie systémy typu "M: N" sú zložitejšie, pretože je potrebné zmeniť kód jadra a užívateľský kód. Pri implementácii M: N je knižnica spracovania nití zodpovedná za plánovanie tokov v dostupných plánovaných jednotkách. To robí kontext najoptimálnejším, pretože sa vyhýbajú systémovým hovorom. To však zvyšuje zložitosť a pravdepodobnosť inverzie, ako aj neoptimálne plánovanie bez veľkej (a drahej) koordinácie medzi plánovačom prostredia a plánovačom jadra.
    Príkladom hybridnej implementácie je aktivácia plánovača používaná vstavanou implementáciou knižnice POSIX NetBSD (pre model M: N, na rozdiel od modelu implementácie jadra 1: 1 alebo modelu používateľského priestoru). Ľahké procesy používané staršími verziami operačného systému Solaris (sada nástrojov Std Thread C).

    Podpora programového jazyka

    Veľa formálnych systémov podporuje funkciu streamovania. Implementácia C a C ++ implementujú túto technológiu a poskytujú prístup k vlastným API rozhraniam pre operačný systém. Niektoré programovacie jazyky na vysokej úrovni, ako napríklad Java, Python a .NET Framework, robia vývojári prúdov abstrakciou špecifických rozdielov pri výkone vlákien v prostredí vykonávania. Iné jazykové rozšírenia sa tiež pokúšajú abstraktne vynechať pojem paralelnosti a streamingu od vývojára. Niektoré jazyky sú určené pre konzistentný paralelizmus pomocou grafických procesorov.
    Niekoľko interpretovaných jazykovuvedomenie si, že podporuje paralelné spracovanie a streaming, ale nie paralelný vykonávanie toku globálneho zámku tlmočníkom (GIL). GIL - blokovanie vzájomného vylúčenia sa vykonáva interpret, ktorý zabráni ako interpretovaný programový kód pre dve alebo viac vlákien súčasne, čo obmedzuje paralelnosť viacjadrové systémy. Ďalšie vykonávacie interpretované programovacie jazyky, ako napríklad Tcl, používajúci rozšírenie téme spánku C. To sa vyhne GIL maximálny limit, za použitia modelu, kedy obsah a kód by mal byť explicitne "zdieľané" medzi tokmi. Programovacích jazykov aplikačne orientované akcie ako Verilog, a expanzia Thread spánok C, majú rôzny threading model, ktorý podporuje maximálne množstvo modelovať ich vybavenie.

    V praktickej viac

    multiprocesovom knižnica volanie funkcie zahájený vygenerovať nový dátový prúd, ktorý berie funkčnú hodnotu ako parameter. Potom sa vytvorí nový paralelný prúd a spustí sa spracovanie spustených funkcií s následným návratom. Programovacie jazyky majú knižnice tokov, ktoré zahŕňajú globálne synchronizačný funkcie, ktoré vám umožní vytvárať a úspešne realizovať multithreading bez chýb pomocou mutex, premennej podmienky, kritické sekcie, monitory a ďalšie typy synchronizácie.
  • Súvisiace publikácie

    C Thread - je to čo?