Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytanie dotyczące programowania wielowątkowego

Ostatnio zmodyfikowano 2013-12-03 17:38
Autor Wiadomość
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 :
C/C++
/*------------------------- Dla pojedynczego wątku -----------------------------*/
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();
    }
}
/*--------------------------------- Dla 2 wątków ------------------------------------*/
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ć ? 
P-98129
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).
P-98145
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 ?

P-98152
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.
P-98157
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.
P-98168
« 1 »
  Strona 1 z 1