Zrobiłem symulacje życia pewnych organizmów na planszy. Każdy taki organizm odpala sie w osobnym watku i wykonuje jakies tam swoje czynnosci zyciowe. Problem polega na tym ze dla wiekszej ilosci organizmow (np 30) program bardzo szybko zawiesza sie. Objawia sie to w te sposob ze panel w ktorym jest to wszystko rysowane nie odswieza sie (komunikaty w konsoli sa nadal widoczne). Mozna uznac, ze po prostu w systemie jest za malo pamieci, jednak czasami ten problem pojawia sie dla mialej ilosci organizmow(watkow) i nie moge wychwycic w jakim momencie sie to dzieje. Jest na to jakis sposob?
Uruchom jakiś program, który pokazuje zużycie procesora(np. pod linuksem "top").
Jeżeli program zużywa więcej niż >90% czasu procesora, to czasem można zaobserwować efekt, który opisujesz.
Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji.
__krzysiek85 napisał(a)
Uruchom jakiś program, który pokazuje zużycie procesora(np. pod linuksem "top").
Jeżeli program zużywa więcej niż >90% czasu procesora, to czasem można zaobserwować efekt, który opisujesz.Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji.
"Jeżeli program zużywa więcej niż >90%"
Tak wlasnie jest.
"Mam tylko nadzieję, że te 30 wątków używa jakichś sensowych mechanizmów synchronizacji."
Synchronizacja w tym programie to tylko wstawienie modyfikatora synchronized do metod, ktore watki odpalaja i modyfikuja wspolne dane. W praktyce nie chcialo mi sie zbytnio nad tym rozdrabniac i dalem modyfikator synchronized praktycznie do wszytskich metod, mozliwe ze to od tego?
może zrób inaczej, niech wątki wypluwają wyniki do jakiejś dynamicznej tablicy a program spokojnie będzie sobie rysować co ileś tam milisekund
pasi? =)
Potwoor_ napisał(a)
może zrób inaczej, niech wątki wypluwają wyniki do jakiejś dynamicznej tablicy a program spokojnie będzie sobie rysować co ileś tam milisekund
pasi? =)
Mysle ze to swietny pomysl, ze tez na to nie wpadlem :)Wieczorem bede mial czas, napisze i sie pochwale czy jest lepiej.
Zrobiłem, tak jak mi podpowiedział Potwoor_. Program zajmuje 40% procesora, przy takich samych warunkach jak wczesniej zabierał 90%. Jednak dalej potrafi stanąć w pewnym miejscu i nie wiem kompletnie dlaczego. Pomocy!
Gdzie szukac bledu? Mozliwe ze zwiecha jest spowodowana nieprawidlowa synchronizacja?