Istnieje kilka wątków w mojej aplikacji, które działają w tle. Łączą się z bazą danych i wykonują czasochłonne zapytania wybrane. W większości przypadków zapytania te zwracają tylko kilka rekordów. Od czasu do czasu mogą jednak zwrócić dziesiątki tysięcy rekordów. Wszystkie te są następnie przetwarzane w pętli.Delphi - dostosowanie czasu snu wątku
Ponieważ taka sytuacja może wystąpić w kilku wątkach w tym samym czasie, nie chcę, aby moja aplikacja wykorzystała 100% czasu procesora, gdy te wątki przetwarzają dane; nie chcę też, aby wszystkie wątki walczyły o czas procesora. Dlatego nazywam funkcję Sleep() w każdej iteracji pętli w tych wątkach.
Nie wiem jednak, jak ustawić czas snu. Nie chcę, aby pętle trwały wiecznie, więc okres snu nie może być zbyt długi. Ustawiłem go na 2 milisekundy w każdej iteracji (w każdym wątku) (dlaczego 2ms? - to dobre pytanie :)).
Z drugiej strony myślałem, że mogę wydłużyć czas snu, ale wywołać uśpienie tylko raz w każdej iteracji (powiedzmy, Sleep (100) co 50 iteracji). Jakie podejście powinienem wybrać? Jedna część pętli trwa około 30 ms (bez żadnych uśpień).
Prosimy o radę.
Dzięki!
Mariusz.
Ale jeśli ten działa w tle na komputerze, na którym również pracuje na kogoś (np napisanie arkusza kalkulacyjnego), nie chcą, aby proces w tle spowodował, że proces pierwszego planu stał się bezużyteczny. – dummzeuch
To prawda, ale właśnie dlatego napisałem, że priorytet wątku tła można obniżyć, pozostawiając inne aplikacje (lub główny wątek) responsywnymi, jednocześnie wykorzystując pełen potencjał systemu. W nowoczesnych (wielordzeniowych) systemach utrzymanie wszystkich rdzeni dostatecznie obciążonych jest znacznie większym problemem niż brak reaktywności pierwszoplanowej aplikacji. I masywne niezoptymalizowane operacje wejścia/wyjścia są znacznie większym zagrożeniem dla użyteczności systemu niż wysokie obciążenie procesora. – mghie