Pytanie dotyczące programowania wielowątkowego
Ostatnio zmodyfikowano 2013-12-03 17:38
Mig Temat założony przez niniejszego użytkownika |
Pytanie dotyczące programowania wielowątkowego » 2013-12-02 21:06:03 Siemka, mam pytanie a mianowicie czy jest sens podzielić aplikacje na wątki w zamieszczony przeze mnie sposób : void SinglethreadingGame::Run() { while( _data.Get_Window().isOpen() ) { _data.Get_State().Control( _data ); _data.Get_State().Update( _data ); _data.Get_State().Render( _data ); _data.Get_Window().display(); _data.Get_Window().clear( sf::Color::White ); _data.Get_Fps_Counter().Update(); } }
void MultithreadingGame::Run() { std::thread t1( & MultithreadingGame::Function_2Thread, this ); t1.detach(); Function_1Thread(); } void MultithreadingGame::Function_1Thread() { while( _data.Get_Window().isOpen() ) { _data.Get_State().Control( _data ); _data.Get_State().Render( _data ); _data.Get_Window().display(); _data.Get_Window().clear(); _data.Get_Fps_Counter().Update(); } } void MultithreadingGame::Function_2Thread() { while( _data.Get_Window().isOpen() ) { _data.Get_State().Update( _data ); } }
Obiekty MultithreadingGame oraz SinglethreadingGame są tworzone za pomocą fabryki abstrakcyjnej , zależnie od liczby obsługiwanych wątków wybierana jest odpowiednia wersja.Pytanie dotyczy tego czy Klasa MulthithreadingGame posiada sensowny podział na wątki , a jeżeli nie to jak powinno to wyglądać, bo w testach wydajność klasa MultithreadingGame wypada znacznie gorzej, domyślam się że to z mojej winy ale jak powinien wyglądać podział na wątki dla klasa MultithreadingGame by zwiększyła się wydajność ? Czy jest wogóle sens dzielenia w takim miejscu na watki ? Edit: Jednak to moja nieuwaga , wraz ze wzrostem liczby operacji wykonywanych w funkcji Update drastycznie zwiększa się różnica w liczba FPS dla 2 róznych implementacji (SinglethreadingGame oraz MultithreadingGame) , skoro tak to pozostaje moje jedno pytanie , czy taki podział ma sens , a jeżeli nie to jak powinien wyglądać ? |
|
DejaVu |
» 2013-12-03 01:46:42 Jakkolwiek nie zrobisz i tak będzie dobrze. Czy będziesz miał dwa wątki czy też 10 wątków to i tak będzie Ci się pojawiał problem aktualizacji wspólnych zasobów. Najwygodniejszym rozwiązaniem jest odczytywanie i wysyłanie wszystkiego w wątku głównym, ale takie podejście będzie mocno rzutowało na płynność gry (w grach turowych to nie powinno być problemem). |
|
Mig Temat założony przez niniejszego użytkownika |
» 2013-12-03 09:09:49 Dzięki wielkie za odpowiedź.Mam jeszcze jedno pytanie, gdzie najlepiej przy pisaniu aplikacji np. gier zastosować wątki,jakie zadania podzielić na osobne wątki ?
|
|
DejaVu |
» 2013-12-03 12:35:25 Na pewno osobny wątek jest konieczny dla komuniakcji sieciowej, aby aplikacja w miarę działa. Resztę najlepiej robić w wątku głównym jeżeli projekt nie jest zbyt duży. Zarządzanie n-wątkami i żonglowanie danymi między nimi jest kłopotliwe - im więcej wątków tym więcej sekcji krytycznych. Więcej sekcji krytycznych = mniejsza wydajność kodu. |
|
Mig Temat założony przez niniejszego użytkownika |
» 2013-12-03 17:38:01 Jestem ci bardzo wdzięczny za odpowiedź. Jeszcze raz dzięki. |
|
« 1 » |