Služba na rozdělování programů mezi jádry – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Služba na rozdělování programů mezi jádry – .NET – Fórum – Programujte.comSlužba na rozdělování programů mezi jádry – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Matěj Andrle+1
Grafoman
30. 9. 2015   #1
-
0
-

Dobrý den,
mám démona, kterýžto reaguje na události vytvářením instancí aplikací, kteréžto následně spouští. No a potřeboval bych efektivněji vynaložit výkon. Mohu tedy nakládat s jádry CPU? A jak se v .NET předává vláda nad CPU? (Když se chci vzdát přiděleného prostoru - ačkoliv toto nepracuje v kooperativním multitaskingu, i v klasickém je možnost se přiděleného prostoru vzdát, co vím.)

Nahlásit jako SPAM
IP: 78.136.139.–
Reklama
Reklama
PiranhaGreg0
Stálý člen
3. 10. 2015   #2
-
0
-

Ahoj, každý proces má prioritu, která určuje, kolik času mu CPU věnuje oproti ostatním procesům. V C# to lze měnit pomocí Process.PriorityClass. Lze tak samozřejmě změnit i svůj proces.

Nemůžeš nicméně OS přímo nadiktovat jaký proces má běžet na jakém vlákně...

A ještě projistotu poznámka. Než to pustíš někde na produkci, tak tu prioritu pořádně otestuj i na slabších PC. Hlavně ta nejvyšší, když je nastavená na proces, který vytíží CPU na 100%, dokáže celý PC dost slušně zasekat...

Nahlásit jako SPAM
IP: 2a00:1028:96c2:1432:816c:...–
Matěj Andrle+1
Grafoman
3. 10. 2015   #3
-
0
-

#2 PiranhaGreg
Ale já chci pracovat s jádry - ne vlákny... Aby se na jednom jádře stahovalo, zatímco na druhém zpracovávalo. A k onomu vzdání se přiděleného prostoru - tuším, že odpovědí bude sleep. Ovšem to dle mého jen vyplní přidělený prostor - nepustí.

Nahlásit jako SPAM
IP: 78.136.191.–
PiranhaGreg0
Stálý člen
3. 10. 2015   #4
-
0
-

Přepsal jsem se, chtěl jsem napsat

Nemůžeš nicméně OS přímo nadiktovat jaký proces má běžet na jakém jádře...

Tohle už si řeší OS a nejde mu do toho kecat. Každopádně není hloupý a když dostane dva procesy, které jsou náročnější, nechá každý běžet na jiném jádře, tak jak by jsi to chtěl.

A k onomu vzdání se přiděleného prostoru... Nevím, co si pod tím přesně představit. Buď můžeš spáchat harakiri a pak nebudeš nikde nic zabírat a nebo si nastavit tu nejnižší prioritu a CPU tě tak přestane skoro řešit a systém ti při první příležitosti přesune okupovanej flek na RAMce na disk.

Opět, tohle by neměla být starost programu/služby, ale OS. Na tobě akorát je, aby jsi minimalizoval využití RAMky. Tedy nedržet (při čekání na další signály) v paměti nějaké zbytečné datové struktury a pokud chceš mít jó jistotu, tak ještě poprosit GCčko, aby se kouklo, jestli se nedá ještě někde něco zahodit.

Nahlásit jako SPAM
IP: 2a00:1028:96c2:1432:816c:...–
PiranhaGreg0
Stálý člen
3. 10. 2015   #5
-
0
-
Nahlásit jako SPAM
IP: 2a00:1028:96c2:1432:816c:...–
Matěj Andrle+1
Grafoman
3. 10. 2015   #6
-
0
-

#5 PiranhaGreg
Při kooperativním multitaskingu si programy řídí přeskakování. U klasického toť řídí OS. Avšak i tak je možné se vzdát vlády nad CPU. No a přesně to umožňuje C/C++/D2. Jen nevím, zda to jde nějak přímo v C#.

Nahlásit jako SPAM
IP: 78.136.137.–
Ovrscout
~ Anonymní uživatel
69 příspěvků
5. 10. 2015   #7
-
+1
-
Zajímavé

#3 Matěj Andrle

Sleep() uvolní procesor až do konce ticku, mluvím o winapi ale předpokládám že to v dotnetu bude podobné. Snadno to zkusíš třeba nastavením čekání na 30sec a kouknout do task manageru :)

omezit proces či vlákno lze nastavením tzv Process/Thread affinity mask, dál už určitě vygooglíš.

Pokud nepotřebuješ předávat data mezi vlákny/procesy opravdu hodně často, tak je lepší nahradit poolování pomocí posílání zpráv nebo synchronizačních funkcí (event,mutex, semafor, a nebo jejich nadstavby), ty totiž předají procesor OS a obnoví se až když je potřeba(tj. druhý proces/vlákno uvolní mutex, atp). Potom už bývá lepší to nechat na OS protože si s tím obvykle už dobře poradí.

Nahlásit jako SPAM
IP: 193.165.79.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 113 hostů

Podobná vlákna

Sluzba WIN — založil Misiak

Systémová služba — založil machis

Služba - logování vyjímek — založil hlucheucho

GetIp() (sluzba tcp) — založil I.

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý