Czy ktoś mógłby wyjaśnić, czy naprawdę istnieje przewaga przy pisaniu wielowątkowego kodu, który działa na pojedynczym procesorze z pojedynczym rdzeniem? Np. Sposób, który przetwarza strony dokumentu tak, że strony wzajemnie się wykluczają w/r/t wyżej wymienionego fragmentu kodu.Programowanie jedno- i wielowątkowe na jednostorowym procesorze
Na pierwszy rzut oka wydaje się, że nie ma przewagi, ponieważ nie jest możliwe wykonywanie wielowątkowych wierceń. Oznacza to, że system operacyjny musiałby kontekstowo przełączać wątki. Zastanawiam się, czy po prostu kodowanie czegoś w sposób jedno-gwintowy może być bardziej efektywne.
Oczywiście istnieje wiele przypadków, w których pisanie wielowątkowego kodu ma sens, ale znowu moje pytanie sprawdza, czy naprawdę jest to korzystne, gdy aplikacja działa na jednordzeniowym procesorze.
EDIT: uwaga, że nie powiedziałem „wniosek”, ale raczej „fragment kodu” - spojrzeć na moim przykładzie powyżej. Najwyraźniej są korzyści z wielowątkowej aplikacji.
Możesz mieć wątki oczekujące na załadowanie plików, dane sieciowe itp. Nawet jeśli tylko jeden może używać procesora naraz. – zch
Jak zauważyli @zch, aplikacje związane z IO mogą korzystać z wielowątkowych nawet w jednym rdzeniu, chociaż nigdy nie uzyskasz dla nich więcej niż 2X przyspieszenia (jeśli IO stanie się zbyt dużym wąskim gardłem przyspieszenie procesora nie będzie materia według prawa Amidhala).Częstszym powodem jest projektowanie wielowątkowych aplikacji, nawet jeśli masz tylko 1 rdzeń w tym momencie, jest to łatwe do przenoszenia dla wielu rdzeni, kiedy staną się dostępne. O wiele lepiej jest zaprojektować aplikację raz, bez zakodowanych na stałe ograniczeń sprzętowych, a następnie ponownie ją zapisać, gdy pojawi się więcej zasobów sprzętowych. – Michael
@Michael Zgadzam się w przypadku, gdy masz całkowitą pewność, że ostatecznie zostaniesz przeniesiony do systemu wielordzeniowego, ale teraz sprawisz, że kod będzie bardziej skomplikowany z powodu czegoś, co możesz chcieć z nim zrobić w przyszłości. nie jest tego warte. –