Vícejádrové CPU   zodpovězená otázka

VB.NET

Dobrý den, jsem začátečník v programování a tak bych se chtěl zeptat, jestli je nějaký rozdíl v programování aplikace, když mám CPU s jedním a nebo více jádry. A jak případně napsat aplikaci tak, aby byla schopna využít maximální výkon CPU.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud máte aplikaci ve které nepoužíváte vlákna, je rozdíl ve výkonu na jednojádrovém a vícejádrovém procesoru zanedbatelný. Pokud v aplikaci používáte více vláken (například k provádění nějakých složitých algoritmů které lze paralelizovat), může být výkon několikanásobně vyšší na vícejádrovém procesoru. Bohužel ne všechno lze paralelizovat a rozdělit nějakou úlohu do více vláken je dost složitá věc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, takže jestli jsem to správně pochopil, tak když v aplikaci budu používat vlákna, tak se výkon automaticky rozdělí?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takhle jednoduché to rozhodně není. Záleží na tom jak je budete používat (jak jsem psal, rozdělit jednu úlohu do více vláken je velmi obtížné, pro začátečníka nemyslitelné). Navíc i na vícejádrovém procesoru je poměrně malá pravděpodobnost, že dvě nebo více vláken v aplikaci pojedou v jednu chvíli skutečně paralelně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží na tom, co budete chtít dělat. Výkon se automaticky rozděleju, to ano, ale každopádně se jedná o velmi pokročilou techniku programování. Začal bych s komponentou BackgroundWorker, která umožní provádět dlouhé operace na pozadí aplikace v jiném vlákně - ale i to přináší jistá úskalí (například při přístupu z vedlejšího vlákna operace do hlavního aplikačního vlákna k formulářovým prvkům).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to pozor, BackgroundWorker je optimalizován právě pro použití ve Windows Forms (interně používá WindowsFormsSynchronizationContext) a proto z jeho vlákna není problém přistupovat k ovládacím prvkům hlavního vlákna (např. v události ProgressChanged). Proto je to také uděláno jako "vizuální" komponenta která se dá přetáhnout z ToolBoxu a je to vhodné pro začátečníky.

Každopádně se pomocí toho nedají řešit složité algoritmy, kde více vláken najednou zpracovává jedny data (např. komprimace, enkódování, šifrování, atd.)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tom, že je vhodná pro pochopení využití vláken pro začátečníky jsme se shodli. Ani jsem neříkal, že je ideální na řešení složitých algoritmů (to si ale nemyslím, že tazatel chce provádět).

A ano, BackgroundWorker nabízí metody dovolující přístup k ovládacím prvkům, ale pokud si přímo do procedury DoWork umístí kód přistupující k ovládacím prvkům, tak chybu získá, což je přesně ta komplikace, o které jsem psal a může být matoucí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro začátečníky je BackgroundWorker ideální, doporučuji podívat se na video na MSTV.cz, tam je BackgroundWorker velmi pěkně popsaný.

http://www.mstv.cz/vyvojari/videos/125/P...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback