WebHU - Programozási kérdések és válaszok

villa vs menet egyetlen magon

Képzeld el, hogy két feladatom van, mindegyiknek 2 másodpercre van szüksége a feladat elvégzéséhez.

Ebben az esetben, ha mindegyikhez két szálat hozok létre, és a számítógépem egymagos, ez nem fog időt takarítani. Igazam van ?

Mi a teendő, ha a fork-t használom két folyamat létrehozására (a gép még mindig egymagos), és mindegyik folyamat egy feladatot lát el? Ez időt takaríthat meg?

Ha nem, lenne egy kérdésem:

A jelenlegi modern gépben (többmagos is), ha több nehéz feladatom van, melyik módszert használjam?

  • Villa ?
  • cérna ?
  • fork + szál, ami azt jelenti, hogy létrehoz néhány folyamatot, és minden folyamat egynél több szálat tartalmaz?
16.12.2016

  • Ezen kombinációk egyikével sem takaríthat meg időt. Ha egy feladat 2 másodpercig tart, akkor 2 másodpercig tart. Lehet, hogy az egyik módszer pazarlóbb, mint a másik (mennyi időt veszítesz a kontextusváltásra, a zárolásokra való várakozásra stb.) Ennek nagy része a megvalósítástól függ, és szerintem nincs általános válasz. 16.12.2016

Válaszok:


1

"a munka 2 másodpercet vesz igénybe" - Ha ez a 2 másodperc teljesen lefoglalja a CPU-t (100%-os terhelés), akkor sem a szálal, sem a fork-vel nem nyersz semmit, ha nincs megosztható magod. Az egymagos CPU egyszerűen elfoglalt, és nem lehet elfoglaltabbá tenni.

Abban az esetben, ha ez a 2 másodperc várakozási időt is tartalmaz (például I/O-n, tárolón, bármin), akkor nyerhet valamit, akár egyetlen maggal is. Az erősítés mértéke a CPU működési arányától és a CPU várakozási arányától és a többfeldolgozás többletköltségétől függ. A legtöbb nem triviális programnak van legalább némi "CPU-várakoztatása", így a többszálú megoldás gyakran még egymagos CPU-kon is hasznos.

A korutin és a kontextusváltás beállításával kapcsolatos többletköltség jelentős lehet, és mérni kell. Nyilvánvaló, hogy minél rövidebb az aktuális feladat futási ideje, annál nagyobb lesz az overhead aránya (egy szál vagy folyamat felállításához stb.), és annál kisebb lesz a többfeldolgozási nyereség.

Hagyományosan a szálak jóval kevesebb többletterhelést jelentenek, mint a folyamatok (végül is ezért találták ki), de a „jelentősen” idővel eltűnt – A modern Linux rendszereken a folyamatok beállítása csak egy kicsit lassabban történik, mint a szálak. (valójában mindkettő ugyanazt a rendszerhívást használja). Inkább az adatok védelmének (vagy megosztásának) mértékére vonatkozó követelmények alapján dönt a szál vagy folyamat között, mint a végrehajtási sebesség alapján.

16.12.2016

2

Még akkor is, ha egyetlen magnak van két szála, felgyorsíthatja a végrehajtást. Ha a rutin tisztán CPU-hoz kötött, akkor két szál nem javít semmit, sőt a teljesítmény rosszabb lesz a környezetváltás miatt. De ha a rutinnak várnia kell a memóriára, a lemezre vagy a hálózatra (ami általában így van), akkor két szál teljesítménynövekedést biztosít még egyetlen mag esetén is.

A fork vs threads kapcsán elmondható, hogy a szálak kevesebb erőforrást igényelnek, így elvileg ez legyen az első választás. De van két figyelmeztetés: 1) lehet, hogy meg akarja szakítani a párhuzamos rutint, ez sokkal biztonságosabb folyamatokkal, mint a szálakkal, és 2) egyes nyelvek (különösen a Python és a Ruby) álszál-könyvtárakat biztosítanak, amelyek nem valódi szálakat használjon, de váltson a rutinok között ugyanazon szál használatával. Ez a szimulált szálfűzés nagyon hasznos lehet például hálózati kérések várásakor, de figyelembe kell venni, hogy ez nem igazi többszálú.

Módosítás: Amint azt Sergio Tulentsev kommentálta, a Ruby és a Python valóban valódi szálakat biztosítanak, és nem csak korutinokat.

16.12.2016
  • Nem ismerem a python-t, de a rubinnak már évek óta igazi szálai vannak. 16.12.2016
  • Igen, valóban van egy szál osztály a Rubyban. A figyelmeztetésem leginkább arra vonatkozott, hogy a Global Interpreter Lock hogyan befolyásolhatja a szálpárhuzamot a Rubyban és a Pythonban. Azt hiszem, ez az oka annak, hogy miért van olyan sok könyvtár az aszinkron eseménykezeléshez, korutinokhoz stb. A Python számára van egy rövid lista a párhuzamos programozási eszközökről itt 16.12.2016
  • Azt javaslom, hogy akkor módosítsa válaszát. Mert a rubinnak valóban külön szálai vannak. Csak hát megnyomorította őket a GVL. Még így sem zöld szálak, ami teljesen más. 16.12.2016
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..