Anonymní profil Jerry – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jerry – Programujte.comAnonymní profil Jerry – Programujte.com

 

Příspěvky odeslané z IP adresy 109.81.214.–

Jerry
Java › Jak se v Jave resi Consumer…
31. 8. 2019   #384192

#11 verejneuzitecnysw
máš mnoho možností, buď naprogramuješ spustíš více java/jar (říkejme mu EXE) souborů necháš přepínání na operačním systému, který má ale tendenci průměrovat výkon takže všechny thready budou dostávat stejný výpočetní čas - za předpokladu, že Priority je nastaveno na NORMAL. pak můžeš v každém takovém EXE souboru naprogramovat, že pokud je jedel libovolný spuštěn jako první, stává se MASTER a dostává prioritu RealTime a ostatní Iddle, tohle funguje na jednojádrovým prcesoru. Na vícejádrovým spouštíš více masterů a detekce který se má spustit se dělá  např. přes systémově sdílenou paměť nebo zasíláním zpráv nebo jednoduše synchronizačním souborem na disku, kam se zapíše kdo je spuštěnej a v jakým režimu běží, každý EXE soubor si pak přečte kolik je spuštěných RealTime vláken a jestli se má přepnout z modu Iddle to RealTime. Znamná to, že všechny spuštěné exe soubory jenom v určitých intervalech čtou ten datový soubor nebo sdílenou paměť atd ... Je to nejjednodušší a nejrychleji se to naprogramuje....

pak je ta varianta producent-konsumer ale jak sem psal tak si vytvoříš jednu universální výpočetní třídu, která bude v sobě obsahovat jak producenta tak toho požírače :) tak i výpočetní část, kterou můžeš uzpůsobit tak, že vytvoříš tzv. "kernel" což je kod pro jeden výpočetní cyklus tvého výpočtu a ten se spustí pokaždé když dostane možnost běžet.

Jerry
Java › Jak se v Jave resi Consumer…
31. 8. 2019   #384191

#11 verejneuzitecnysw
máš to hezký, já Javu neumim... dělal sem něco podobnýho pro native C a C++ a pak C++/CLI pro jednojádrový procesory a i vícejádrový. Nevim jak je na tom Java, ale C++/CLI používá pro .NET ThreadPriority flag

https://docs.microsoft.com/cs-cz/dotnet/api/system.threading.threadpriority?view=netframework-4.8

https://www.geeksforgeeks.org/c-sharp-thread-priority-in-multithreading/

tim si určíš jak rychle vlákno poběží, ideálně platí, že ThreadPriority.Highest dáš jen tolika vláknům kolik je na procesoru jader (nebo možných vláken), tim pádem zatížíš procesor na 99 procent a už ti nebude reagovat na vstupy např. z klávesnice a tak...

jinak se to dělá tak, že ta část kodu, která tvoří vstupní bod každého vlákna pro daný thread tvoří lokálního administrátora vlákna a ten zavolá výpočetní jádro třídy. stejně tak můžeš ne-mít lokálního administrátora a nechat vše na jednom mater administrátorovi samostatné třídě, která vše administruje, ale nezapomeň že ten vyžaduje minimálně 5 procent výkonu procesoru. Nevim jak je to v Javě ale pro .NET při vytvoření třídy "Filter" příkazem gcnew/new získáš handle dané třídy. tato třída musí mít předdefinované metody třeba admin, kterého když zavoláš z hlavního administrátora tak se spustí např. jedna smyčka výpočtu a pak se vlákno uvolní. V C# na injektáž kodu filtru je tzv. dynamický kompilátor z projektu Roslyn. Jak je na tom Java opravdu nevim ...

 

 

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