std::thread a CreateThread porównanie szybkości

0

Po korekcie...
Sprawdzałem czy są jakieś różnice różnice w czasie działanie programu w zależności od sposobu tworzenia wątków.
W moim programie do wyszukiwania twarzy na zdjęciu używam wielowątkowości.
Środowisko testu: System Windows 10 64-bit, Kompilator Visual Studio Express 2015, kompilacja kodu C++ 64-bitowa.
Tworzę tam tablicę wątków i rozdzielam zadania po równo każdemu wątkowi.

Oto 2 sposoby tworzenia N wątków:

1. Przez CreateThread() z WinPI

HANDLE gTabThreadHandle[g_MaxLWatkow];
g_LUruchomionychWatkow = N;
for (i = 0; i < N - 1; ++i) //pętla od 0 do N-2
{ gTabNry[i] = i; 
  gTabThreadHandle[i] = CreateThread(NULL, 0, &FunWatek, (void *)&gTabNry[i], 0, &tid); //tworzę i od razu uruchamiam wątek
}
FunWatek(&gTabNry[N - 1]); //ostatni niby-wątek uruchamiam w głównym procesie

//Po utworzeniu wsz. wątków czekam na ich zakończenie
while (g_LUruchomionychWatkow > 0) Sleep(10); 

2. Przez std::thread z C++11

std::thread gTabThread[gMaxDozwLWatkow];
g_LUruchomionychWatkow = N;
for (i = 0; i < N - 1; ++i) //pętla od 0 do N-2
{ gTabNry[i] = i; 
  gTabThread[i] = std::thread(FunWatek, (void *)&gTabNry[i]);
}
FunWatek(&gTabNry[N - 1]); //ostatni niby-wątek uruchamiany w procesie

//Po utworzeniu wsz. wątków czekam na ich zakończenie
for (i = 0; i < N - 1; ++i) gTabThread[i].join(); 

I taka tam funkcja wątkowa:

DWORD WINAPI FunWatek(void *Arg)
{ int NrWatka = *((int*)Arg); //nr wątka
  ProceduraWatka(NrWatka);
  g_LUruchomionychWatkow--; //reduce the count
  return 0;
}

Otóż nie zauważyłem większych różnic w czasach działania programu między tymi dwoma sposobami tworzenia wątków.
Jednak użycie biblioteki #include <thread> dla std::thread zwiększyło 2 razy kod binarny programu (o 210 KB).
Natomiast użycie std::thread ułatwia pisanie aplikacji na różne systemy, tzw. portable code.

1

x.join() nie uruchamia wątku x, tylko blokuje obecny aż do zakończenia x. http://en.cppreference.com/w/cpp/thread/thread/join

Trochę słaby ten benchmark. Nie podałeś kodu... Zaraz się jeszcze okaże, że porównujesz wersje debug...

Swoją drogą: po co ta zabawa z new?

0

No tak, źle użyłem .join i stąd te różnice w czasach. Mój błąd. Treść wątku poprawiłem albo można go usunąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1