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/14 21:22] – [vlakna/threads] djbuldogc_multiprocessing [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 2: Řádek 2:
  
   * Multiprocessing se dělá buď kvůli paralelnímu zpracování úlohy (jedna část řídí program, další části vykonávají nějakou činnost) nebo kvůli výkonu (čím víc CPU zapojíme do výpočtu, tím rychleji bude výsledek)   * Multiprocessing se dělá buď kvůli paralelnímu zpracování úlohy (jedna část řídí program, další části vykonávají nějakou činnost) nebo kvůli výkonu (čím víc CPU zapojíme do výpočtu, tím rychleji bude výsledek)
-  * Procesy, Vlákna/Threads, Lightweight procesy ... zajímavá prezentace [[http://www.google.cz/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&ved=0CEgQFjAD&url=http%3A%2F%2Fwww.cosc.brocku.ca%2FOfferings%2F4P13%2Fslides%2Fthreads.ppt&ei=raqYUr6VK4uGywO74IK4BQ&usg=AFQjCNFCJuR0DNs0Vfo0vcw95Sf4bA4Ydw&sig2=kix-xucQPbYw7T-1KK30rA&bvm=bv.57155469,d.bGQ|link]] 
  
-  * fork() - dělá kopii programu, kopie nesdílí žádné zdroje +===== Pojmy =====
-  * clone() - obdoba fork, ale kopie sdílí mezi sebou paměť, file deskriptory, signály. bacha, četl jsem, že funkce umí udělat jak fork, tak pthread_create... podle toho s jakýma atributama je zavolána. Mohou z toho tedy plynout stejná omezení jako pro pthread +
-  * phreads knihovna - pouze interní vlákna? LWP? může běžet na 1 CPU +
- +
-===== pojmy =====+
   * multitasking   * multitasking
   * multithreading   * multithreading
   * multiprocessing   * multiprocessing
  
-===== vlakna/threads =====+====== Vlákna/threads ======
  
-  * vlákno bývá označováno jako tzv. LWP - lightweight process+  * vlákno bývá označováno jako tzv. LWP - lightweight process (jednoduše to není heavy full proces)
   * vlákno se spouští uvnitř procesu a dokáže sdílet jeho systémové prostředky   * vlákno se spouští uvnitř procesu a dokáže sdílet jeho systémové prostředky
-  * [[https://www.google.cz/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEwQFjAE&url=http%3A%2F%2Flabe.felk.cvut.cz%2Fvyuka%2FX33OSA%2FTema-05-Vlakna.ppt&ei=xpTVUpXSDYPy7Aby9oGIDQ&usg=AFQjCNFe11FFaEr2d1o8s_i5LtpVmCHDKg&bvm=bv.59378465,d.ZGU|zdroj]]+  * [[https://www.google.cz/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEwQFjAE&url=http%3A%2F%2Flabe.felk.cvut.cz%2Fvyuka%2FX33OSA%2FTema-05-Vlakna.ppt&ei=xpTVUpXSDYPy7Aby9oGIDQ&usg=AFQjCNFe11FFaEr2d1o8s_i5LtpVmCHDKg&bvm=bv.59378465,d.ZGU|prezentace vlákna]] [[http://www.linux.cz/noviny/1998-0809/clanek11.html|linux a vlákna]] 
 +  * [[http://www.google.cz/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&ved=0CEgQFjAD&url=http%3A%2F%2Fwww.cosc.brocku.ca%2FOfferings%2F4P13%2Fslides%2Fthreads.ppt&ei=raqYUr6VK4uGywO74IK4BQ&usg=AFQjCNFCJuR0DNs0Vfo0vcw95Sf4bA4Ydw&sig2=kix-xucQPbYw7T-1KK30rA&bvm=bv.57155469,d.bGQ|Procesy, Vlákna/Threads, Lightweight procesy ... zajímavá prezentace]] 
 + 
 + 
 + 
 +===== User space/level threads (ULT) =====
  
-  * user space/level threads (ULT) 
     * Vlastnosti     * Vlastnosti
       * Správu vláken provádí tzv. vláknová knihovna (thread library) na úrovni aplikačního procesu, JOS o jejich existenci neví       * Správu vláken provádí tzv. vláknová knihovna (thread library) na úrovni aplikačního procesu, JOS o jejich existenci neví
Řádek 34: Řádek 33:
       * Jádro přiděluje procesor pouze procesům, takže dvě vlákna téhož procesu nemohou běžet současně, i když je k dispozici více procesorů ... prý to jde nějak vynutit řikal frebauer, ale jestli to nebylo v kernel space :) nějakej set mask nebo co..       * Jádro přiděluje procesor pouze procesům, takže dvě vlákna téhož procesu nemohou běžet současně, i když je k dispozici více procesorů ... prý to jde nějak vynutit řikal frebauer, ale jestli to nebylo v kernel space :) nějakej set mask nebo co..
  
-  * kernel space/level threads (KLT)+===== kernel space/level threads (KLT) ===== 
     * skutečný paralelismus, blokování jednoho vlákna neovliní vlákna další     * skutečný paralelismus, blokování jednoho vlákna neovliní vlákna další
     * Výhody:     * Výhody:
Řádek 44: Řádek 44:
       * Systémová správa je režijně nákladnější než u čistě uživatelských vláken       * Systémová správa je režijně nákladnější než u čistě uživatelských vláken
       * Klasické plánování není spravedlivé: Dostává-li vlákno své kvantum, pak procesy s více vlákny dostávají více času       * Klasické plánování není spravedlivé: Dostává-li vlákno své kvantum, pak procesy s více vlákny dostávají více času
 +
 +====== Praxe ======
  
   * Knihovna Pthreads poskytuje unifikované API:   * Knihovna Pthreads poskytuje unifikované API:
Řádek 50: Řá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 +      * 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 
 +    * 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. 
 +      * 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.1389730931.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki