Uživatelské nástroje

Nástroje pro tento web


c_multiprocessing

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
c_multiprocessing [2014/01/15 10:06] djbuldogc_multiprocessing [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 52: Řádek 52:
     * Pthreads je tedy systémově závislá knihovna     * Pthreads je tedy systémově závislá knihovna
  
-  * Vlákna Linux:+  * Vlákna/LWP Linux:
     * Linux nazývá vlákna tasks     * Linux nazývá vlákna tasks
     * Vytváření vláken je realizováno službou clone()     * Vytváření vláken je realizováno službou clone()
-    * clone() umožňuje vláknu (task) sdílet adresní prostor s rodičem +    * [[fork|fork()]] 
-      * fork() vytvoří zcela samostatný proces s kopií prostoru rodičovského procesu. Uplaťnuje se přitom CoW (copy-on-write). Mechanismus CoW namapuje virtuální pamět potomka na fyzickou paměť rodiče. Až pří zápisu do paměti jakéhokoliv z procesů se přislušné modifikované stránky kopírují do nové stránky ve fyzické paměti +      * vytvoří zcela samostatný proces s kopií prostoru rodičovského procesu.  
-      * clone() vytvoří vlákno, které dostane odkaz (pointer) na adresní prostor rodiče +      * Uplaťnuje se přitom **CoW** (copy-on-write). Mechanismus CoW namapuje virtuální pamět potomka na fyzickou paměť rodiče. Až pří zápisu do paměti jakéhokoliv z procesů se přislušné modifikované stránky kopírují do nové stránky ve fyzické paměti 
-    * [[http://www.root.cz/clanky/pridelovani-procesoru-procesum-a-vlaknum-v-linuxu/|zdroj]]+    * clone()  
 +      * vytvoří vlákno, které dostane odkaz (pointer) na adresní prostor rodiče 
 +      * umožňuje vláknu (task) sdílet adresní prostor s rodičem 
 +      * samotná funkce clone se v programu většinou nepoužívá (využívají ji knihovny jako pthreads) 
 +    * pthreads 
 +      * [[http://www.root.cz/clanky/pridelovani-procesoru-procesum-a-vlaknum-v-linuxu/|článek o vláknech v linuxu na rootu]]
       * Poslední implementací je implementace NPTL (Native POSIX Thread Library). Tato implementace se opět vrací k mapování 1:1 (one-to-one, kernel vlakno = user space vlakno). Díky tomu odstraňuje nutnost použití dvou plánovačů. Implementace používá podobné techniky jako LinuxThreads (použití syscallu clone). Díky změnám v kernelu – např. přepracování syscallu clone, zavedení mapy alokovaných pid, O(1) plánovače, futexů a dalším – odstraňuje i výkonnostní problémy původní implementace LinuxThreads. Navíc je plně kompatibilní s normou POSIX. Tato implementace byla v době svého uvedení cca dvakrát výkonnější než NGPT. Uvedena byla přibližně ve stejné době jako NGPT – tj. v letech 2002/2003. Je součástí kernelu 2.6 a je plně integrována se současnou GNU C Library.       * Poslední implementací je implementace NPTL (Native POSIX Thread Library). Tato implementace se opět vrací k mapování 1:1 (one-to-one, kernel vlakno = user space vlakno). Díky tomu odstraňuje nutnost použití dvou plánovačů. Implementace používá podobné techniky jako LinuxThreads (použití syscallu clone). Díky změnám v kernelu – např. přepracování syscallu clone, zavedení mapy alokovaných pid, O(1) plánovače, futexů a dalším – odstraňuje i výkonnostní problémy původní implementace LinuxThreads. Navíc je plně kompatibilní s normou POSIX. Tato implementace byla v době svého uvedení cca dvakrát výkonnější než NGPT. Uvedena byla přibližně ve stejné době jako NGPT – tj. v letech 2002/2003. Je součástí kernelu 2.6 a je plně integrována se současnou GNU C Library.
 +      * fork je programátorsky jednodušší
 +      * když se ukončí vlákno, někdo by měl vyzvednout návratovou hodnotu (funkce pthread_wait nebo tak)
 +      * vlákna sdílý paměť, otevřené soubory (fd), sockety, signály (bacha na obsluhu signálu, např používání sleep)
c_multiprocessing.1389776817.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki