Zpracování dat v reálném čase - vlákna – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zpracování dat v reálném čase - vlákna – Java – Fórum – Programujte.comZpracování dat v reálném čase - vlákna – Java – Fórum – Programujte.com

 

petr
~ Anonymní uživatel
746 příspěvků
26. 10. 2010   #1
-
0
-

Zdravím.
Obecné zadání:
Existuje (malý)buffer mimo kontrolu aplikace, který je plněn velkým množstvím dat. Rychlost přitékání dat se průběžně mění. Pokud nejsou data z bufferu vytažena před zaplněním, pak jsou nejstarší data přepsána. Data jsou do bufferu vkládána po kvantech a vytáhnout jdou zase jen po jednotlivých kvantech. Aplikace data z bufferu vytahuje a zpracovává. Zpracování může být časově náročné a je nutné data třídit a podle obsažených informací také různě zpracovávat.

Obecné řešení:
Existuje vlákno, které data z bufferu vytahuje a vkládá do většího bufferu, ze kterého je vytahují další vlákna, která tato data zapracovávají.

Otázka:
Jak předávat řízení mezi vlákny?

Moje odpověď:
Nelze se spolehnout na to, že ostatní vlákna předají řízení včas zpět čtecímu vláknu. Proto bude mít čtecí vlákno maximální prioritu a při každém vyprázdnění bufferu se vždy na krátký čas uspí sleep(). Vzhledem k tomu, že se rychlost přitékání dat může měnit a chci zajistit ostatním vláknům co nejvíce času na zpracování dat, bude se doba sleep měnit. Jestliže se čtecí vlákno probudí a při pokusu o čtení z bufferu zjistí, že je prázdný, zvětší se doba po kterou se uspí. Pokud se probudí a v bufferu něco je, patřičně se doba zkrátí (podle počtu přečtených kvant). Tím by se měla doba uspání čtecího vlákna udržovat optimální.

Tak a teď k dotazu:
Je to správný přístup? Nelze to řešit nějak efektivněji, nebo lépe? Nemůžu si pomoct, ale pořád se mi na tom něco nezdá.

Díky
Petr

Nahlásit jako SPAM
IP: 217.112.175.–
KIIV
~ Moderátor
+43
God of flame
26. 10. 2010   #2
-
0
-

kdyz pouzivas vlakna tak se o predavani rizeni stara system.. co by me trapilo vic je to prepisovani starsich hodnot.. muzes skoncit tak ze se predbehnes a nacitaci vlakno ti to bude prepisovat treba jen o jedno dopredu .. pak se nacitani na moment zastavi a najedou mas data o kolo pozadu..
pripadne semafor a pri prepisovani si zabrat i pozici odkud se data zpracovavaji a posunout pred pozici kam se vkladaj...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
petr
~ Anonymní uživatel
746 příspěvků
26. 10. 2010   #3
-
0
-

To KIIV :
Nevím jestli si dobře rozumíme. Do prvního bufferu prostě data přitékají a já jej nijak neovlivním - kromě toho, že můžu data vytáhnout. (Data která vytáhnu se z bufferu odstraní.) Systém se sice o předávání řízení stará, ale pokud budu mít běhuschopné vlákno s maximální prioritou, tak pravděpodobně systém nikdy nepředá řízení vláknům s nižší prioritou. Pokud budou mít všechna vlákna stejnou prioritu, tak zase riskuji, že se opozdím ve čtení a prošvihnu nějaká data. Tedy jediné řešení které vidím je, že se čtecí vlákno s maximální prioritou čas od času vzdá řízení a na čas umožní předat řízení vláknům s nižší prioritou. Aby se čtecí vlákno s nejvyšší prioritou stalo neběhuschopným a systém mohl předat řízení ostatním může se uspat metodou sleep(), nebo čekat na wait() (notify()).

Pokouším se tedy vyřešit, jak dát ostatním vláknům maximální možný čas ke zpracování dat, ale neprošvihnout přitom nějaká data ze vstupního bufferu.

Nahlásit jako SPAM
IP: 217.112.175.–
KIIV
~ Moderátor
+43
God of flame
26. 10. 2010   #4
-
0
-

jo takhle je to mysleny.. moc to resis.. vlakna se o sebe umi postarat a kdyz mas stejnou prioritu tak se neprepinaj zrovna pomalu...
ale furt to nebezi na realtime systemu a tim spis java je strasnej paskvil na pokus o realtime..

zalezi spis kolik tech dat tak prumerne muze byt a odkud je beres.. pokud z nejakyho streamu tak se proste neztrati

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 57 hostů

Podobná vlákna

Input v realném čase — založil MatyMal

HTTP - zpracovani dat — založil Kuba

Poslání dat do vlákna — založil eximik

Moderátoři diskuze

 

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