Bawiłem się z gwintowaniem, próbując przesuwać granice do ekstremum - dla własnej rozrywki. Wiem, że wątek domyślnie ma 25 wątków i można go przesłać do 1000 (zgodnie z MSDN). Co jednak jest praktycznym ograniczeniem wątków na rdzeń procesora? W pewnym momencie przełączanie kontekstów spowoduje więcej wąskiego gardła niż oszczędzanie przez wątki. Czy ktoś ma jakieś dobre praktyki obejmujące to? Czy mówimy 100, 200, 500? Czy to zależy od tego, co robią wątki? Co decyduje o architekturze, która poza trybami dyktowanymi przez wiele wątków działa optymalnie na rdzeń procesora?Jakie są praktyczne ograniczenia wątków na procesor?
Odpowiedz
Wszystko zależy od tego, co robią wątki, oczywiście. Jeśli są one związane z CPU (powiedzmy, że siedzą ciasno w nieskończonej pętli), to jeden wątek na rdzeń wystarczy do nasycenia procesora; więcej niż to (i będziesz mieć więcej, z procesów w tle itd.) i zaczniesz się spierać.
Z drugiej strony, jeśli wątki nie są odpowiednie do uruchomienia (np. Zablokowane na jakimś obiekcie synchronizacji), to limit, ile byś miał, byłby dyktowany przez czynniki inne niż CPU (pamięć dla stosów, Limity wewnętrzne systemu operacyjnego itp.).
Jeśli twoja aplikacja nie jest związana z procesorem (jak większość), przełączniki kontekstu nie są wielkim problemem, ponieważ za każdym razem, gdy aplikacja musi czekać, konieczna jest zmiana kontekstu. Problem posiadania zbyt wielu wątków dotyczy struktur danych systemu operacyjnego i niektórych anomalii synchronizacji, takich jak głód, gdzie wątek nigdy (lub bardzo rzadko) ma szansę na wykonanie z powodu losowości algorytmów synchronizacji.
Jeśli twoja aplikacja jest związana z procesorem (pozostaje 99% czasu pracy z pamięcią, bardzo rzadko zdarza się I/O lub czekać na coś innego, np. Dane wejściowe użytkownika lub inny wątek), wówczas optymalny byłby 1 wątek na rdzeń logiczny , ponieważ w tym przypadku nie nastąpi przełączanie kontekstu.
Pamiętaj, że system operacyjny przerwie wątki za każdym razem, nawet jeśli istnieje tylko jeden wątek dla wielu procesorów. System operacyjny przerywa wątki nie tylko w celu przełączania zadań, ale także w celu zarządzania wątkami (np. Aktualizowanie liczników do wyświetlania w Menedżerze zadań lub umożliwienie superużytkownikowi jego zabicia).
Powiedzmy, że robisz zwykłe rzeczy biznesowe, takie jak odbieranie danych gniazd i przesyłanie z dużą prędkością do bazy danych o pewnym opisie - dla argumentu SQL Server. Teoretycznie .NET nie będzie obsługiwać operacji we/wy w prawdziwym tego słowa znaczeniu - może to być wyrzucenie SqlBulkCopy do SQL Server. – BobTheBuilder
Po uruchomieniu systemu operacyjnego jest już mnóstwo wątków. Tak więc jeden wątek na rdzeń jest optymalny, tak, ale tak naprawdę nigdy nie dzieje się w rzeczywistości. Nie widzę, co to jest wiedzieć, jaka byłaby optymalna liczba wątków na rdzeń .... Twoja aplikacja nie jest jedyna uruchomiona. –
@Joel Gauvreau Nazwij to ciekawością. Czy nie dlatego właśnie znaleźliśmy się w tej pracy. Pragnienie wiedzy i zrozumienia ... więc moja odpowiedź na pytanie "co jest najważniejsze?" jest "po prostu wiedzieć". – BobTheBuilder
- 1. Jakie są ograniczenia wątku STA w porównaniu do wątków MTA?
- 2. Jakie są praktyczne zastosowania wzoru metody Factory?
- 3. Jakie są praktyczne zastosowania XOR w algorytmach
- 4. Jakie ograniczenia dotyczą nieprzejrzystych odpowiedzi?
- 5. Praktyczne ograniczenia dotyczące liczby obliczeń constexpr
- 6. Jakie są ograniczenia implementacji Klastra NDB MySQL?
- 7. Jakie są ograniczenia dotyczące liczby zasobów Androida?
- 8. Jakie są ograniczenia kompilacji dart do javascript?
- 9. Jakie są ograniczenia rozmiaru pliku danych Fb.ui?
- 10. Jakie są techniczne ograniczenia telefonuGap/Cordova?
- 11. jakie jest praktyczne zastosowanie System.Transactions?
- 12. Jakie są praktyczne zastosowania algorytmów najniższego wspólnego przodka?
- 13. Jakie ograniczenia nakłada matplotlib na format renderowania?
- 14. Jakie są ograniczenia zestawów narzędzi WiX i WiX?
- 15. Jakie są ograniczenia pierwotnych typów znaków w D?
- 16. Jakie są ograniczenia rozumowania w ilościowej arytmetyki w SMT?
- 17. Jakie są ograniczenia wnioskowania typów wyższych typów w Scali?
- 18. Jakie są praktyczne różnice między formularzami opartymi na szablonach i formami reaktywnymi?
- 19. jakie są ograniczenia odwrotności w szynach 3 z ActiveRecord
- 20. Jakie są ograniczenia dla nazw zakładek w Microsoft Word?
- 21. Jakie ograniczenia widgetów są poprawne dla klas domeny Grails?
- 22. Jakie klasy kolekcji wątków bezpieczne są dostępne w Silverlight 4?
- 23. Jakie są prawidłowe ustawienia manifestu Androida dla aplikacji Adobe AIR w celu ograniczenia dostępności urządzenia?
- 24. Jakie są zalety różnych endiannesses?
- 25. jQuery .each() - Zastosowania praktyczne?
- 26. Praktyczne zastosowania typu dynamiczny Scala
- 27. Ćwiczenia praktyczne?
- 28. Jakie jest praktyczne zastosowanie urządzenia io! blok w Clojure?
- 29. Jakie jest znaczenie "statycznego jako ograniczenia funkcji?
- 30. Optymalizacja maksymalnej liczby wątków uruchomionych na procesorze
http://stackoverflow.com/questions/1718465/optimal-number-of-threads-per-core - to może odpowiedzieć na kilka pytań podczas oczekiwania na odpowiedzi tutaj :) – dotalchemy
@dotalchemy - dzięki, anegdotyczne informacje są zwykle całkiem pomocne; Było tam kilka dobrych wglądów. Ciekawe, czy ktoś poruszy informacje dotyczące najlepszych praktyk. – BobTheBuilder
42. Oczywiście ... –