Ahoj, pracuji na hře v JWLGL (spíš ze zvědavosti, než pro ten finální
produkt) a mám tam nějaké činnosti (např. path finding), které trvají
relativně dlouho a na jejich řešení není potřeba v herní smyčce čekat -
no prostě ideální adepti na asynchronní tasky pomocí thread poolu. Ovšem
po naimplementování hra běží velice neochotně.
Algoritmus, který běžel předtím stabilně na 60FPS (a 60fps je maximum,
jinak by to běželo i víc), tak teď běží v průměru tak na 30 a jsou tam
často několikavteřinový záseky. Dokonce už samotná existence byť jen
jednoho dalšího vlákna, které ani nemusí nic dělat, výrazně snižuje
výkon. Naopak skoro nehraje roli, jestli nasázím do fronty tasků 100, nebo
10 000.
Snažil jsem se to různě optimalizovat, měnit počty a priority vláken,
přidávat JVM paměť, ale to pomohlo jen minimálně. Zkoušel jsem vytvořit
vlastní implementaci i použít ThreadPoolExecutor, který java už obsahuje,
ale v tom není rozdíl. Už moc nevím co s tím.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.