Ile wątków potrzeba, aby były złym wyborem?
Muszę napisać niezbyt duży program w C ++, używając boost :: thread.
Problem polega na tym, że przetwarzamy duże (może tysiące lub dziesiątki tysięcy. Możliwe są również setki i miliony) liczby (prawdopodobnie) dużych plików. Każdy plik jest niezależny od drugiego i wszystkie znajdują się w tym samym katalogu. Myślę o użyciu wielowątkowego podejścia, ale pytanie brzmi: ile wątków należy użyć? Mam na myśli, jaki rząd wielkości? 10, 500, 12400?
Istnieją pewne problemy z synchronizacją, każdy wątek powinien zwracać strukturę wartości (które są gromadzone dla każdego pliku), a te są dodawane do struktury „globalnej”, aby uzyskać ogólne dane. Zdaję sobie sprawę, że niektóre wątki mogą „być głodne” z powodu synchronizacji, ale czy to tylko operacja dodawania, czy to ma znaczenie?
Myślałem o tym
for(each file f in directory){
if (N < max_threads)//N is a static variable controlling amount of threads
thread_process(f)
else
sleep()
}
To jest w HP - UX, ale nie będę w stanie przetestować go często, ponieważ jest to zdalny i dość niedostępny serwer.