Mam duży problem z wątkami pod Windows 10.
Dotychczas mój program napisany w Delphi XE działał bez wykorzystywania wątków. W dużym uproszczeniu funkcjonował w następujący sposób:
- Najpierw uruchamiana była Procedura A. Wywoływanie Procedury A następowało „jedno po drugim” 36 razy (tyle mam zestawów danych do przeliczenia).
- Następnie (w oparciu o uzyskane wyniki) uruchamiana była Procedura B. Tym razem wywoływanie Procedury B następowało 10 razy – też jedno po drugim.
Procedura A i B mają swoje podprocedury. Program w konfiguracji jak wyżej tzn. „bez wątków” na Windows 7 wykonywał obliczenia w około 10 sekund.
Jako amator programowania postanowiłem zmodyfikować działanie programu o wielowątkowość:
- Najpierw uruchamianych jest 36 Wątków A (zawierających procedurę A) i czekam, aż wszystkie 36 wątków zostanie zakończonych.
- Potem uruchamianych jest 10 Wątków B (zawierających procedurę B) i znów czekam, aż wszystkie 10 wątków zostanie zakończonych.
Dla obu wątków stworzyłem procedurę MyTerminate(Sender: TObject), która zgłasza mi kiedy wszystkie 36 Wątków A i 10 Wątków B zostało zakończonych.
Obecnie program w konfiguracji „wielowątkowej” wykonuje obliczenia na Windows 7 w około 5 sekund – zatem upakowanie procedur w wątki dwukrotnie przyśpieszyło działanie programu.
Niestety mój optymizm i satysfakcja, że zrobiłem w amatorskim programowaniu niewielki krok do przodu nie trwał zbyt długo… Po uruchomieniu programu na Windows 10 okazało się, że obliczenia programem „wielowątkowym” trwają uwaga … 2-3 razy dłużej niż programem bez wątków.
Zacząłem analizować tą kuriozalną sytuację i podsumowując sprawa wygląda tak:
Windows 7, procesor i7, 16GB RAM:
Program „bez wątków”: około 10 sekund
Program „z wątkami”: około 5 sekund
Jest ok!
Windows 8, procesor i5, 4GB RAM:
Program „bez wątków”: około 16 sekund
Program „z wątkami”: około 8 sekund
Jest ok!
Na koniec porażka: Windows 10, procesor i7, 32GB RAM:
Program „bez wątków”: około 7 sekund
Program „z wątkami”: około 20 sekund
Program na wielu komputerach z zainstalowanym Windows 10 zachowuje się tak samo – mianowicie konfiguracja "wielowątkowa" sprawia, że program działa absurdalnie – tzn. znacznie dłużej niż w konfiguracji bez wątków.
Bardzo proszę o pomoc i podpowiedź, co może być przyczyną problemu? Podkreślam, że jest to moja pierwsza przygoda z wątkami. Zastanawiam, że czy w przypadku Windows 10 nie jest to np. kwestia priorytetu wątku, czy innych ustawień.
Szukając odpowiedzi znalazłem artykuł, w którym jest mowa o problemach Windows 10 z szybkim
zamykaniem procesów