Grałem w Hypnospace Outlaw, grę o systemie operacyjnym w stylu retro. Ten system operacyjny ma osobliwe zachowanie, że podczas ładowania strony internetowej, poruszanie kursorem myszy spowoduje szybsze załadowanie strony.
To mi o czymś przypomniało. Kiedy byłem młody, jeśli dobrze pamiętam, Windows 95 (jeśli nie 98) miał to dziwne zachowanie, że podczas instalowania programów, machanie kursorem myszy zrobić postęp szybciej. Co było tego przyczyną? Wygooglowałem to, nie mogłem znaleźć nic związanego z tym.
Przepraszam za niejasne wyjaśnienie.
Jest to spowodowane wadą sposobu, w jaki Windows 95 generuje zdarzenia, oraz faktem, że wiele aplikacji jest sterowanych zdarzeniami.
Aplikacje Windows 95 często używają asynchronicznego wejścia/wyjścia, to znaczy proszą o wykonanie jakiejś operacji na pliku, takiej jak kopiowanie, a następnie informują system operacyjny, że mogą zostać uśpione do czasu zakończenia tej operacji. Poprzez uśpienie pozwalają one innym aplikacjom na działanie, zamiast marnować czas procesora bez końca pytając, czy operacja na pliku została już zakończona.
Z powodów, które nie są do końca jasne, ale prawdopodobnie z powodu problemów z wydajnością na maszynach z niższej półki, Windows 95 ma tendencję do łączenia komunikatów o zakończeniu operacji wejścia/wyjścia i nie wybudza od razu aplikacji do ich obsługi. Jednakże, budzi aplikację na wejście użytkownika, przypuszczalnie po to, aby zachować jej reaktywność, a kiedy aplikacja jest przebudzona, obsłuży również wszystkie oczekujące komunikaty I/O.
Tak więc poruszanie myszą powoduje, że aplikacja szybciej przetwarza komunikaty wejścia/wyjścia i szybciej się instaluje. Efekt był dość wyraźny; duże aplikacje, których instalacja mogła trwać godzinę, można było zredukować do 15 minut przy odpowiednim użyciu myszy.
Tak, jest to rzeczywisty efekt powodujący wymierne przyspieszenie i może być dowolnie powielany:
Spróbuj otworzyć duży plik za pomocą Notatnika na współczesnej maszynie. Okno nie może być pełnoekranowe. Po załadowaniu zaznacz cały tekst za pomocą myszy (klawiatura działa równie dobrze, wymaga tylko więcej manualnych umiejętności). Wciąż trzymając wciśnięty przycisk (i zaznaczając) przesuń mysz w dół, aby tekst został zaznaczony i przewinięty. Teraz porównaj prędkość przewijania, trzymając mysz nieruchomo, z prędkością poruszania nią. W zależności od maszyny prędkość może być kilkukrotnie większa.
Niesamowite, nieprawdaż?
Można to zaobserwować również w wielu innych programach, Notatnik jest tylko łatwym do odtworzenia przykładem. Jest to związane z tym, w jaki sposób multitasking działał we wczesnych wersjach Windows. Tutaj wszystko kręciło się wokół kolejki komunikatów. Machanie myszą powodowało zalew wiadomości mouse-move, co z kolei powodowało, że programy budziły się częściej i (w zależności od ich struktury) aktualizowały swoje stany za każdym razem, wchodząc ponownie w pętlę wiadomości, dając czas na aktualizacje ekranu, co w efekcie dawało szybszą reakcję. To pokazuje przebłysk sposobów, jakich MS użył, by uczynić Windows raczej responsywnym pomimo jego kooperacyjnej, wątkowej natury.
Windows pre-NT (Windows 1,2,3,3.11,95,98) był cooperative multitasking vs NT's (2000, XP, Vista, 7 & 10) preemptive multitasking.
Na spółdzielni multitasking, na pierwszym planie aplikacja musi dać kontrolę do innych zadań. Tak więc jeśli aplikacja na pierwszym planie utknęła, cała maszyna zamarzła.
Preemptive multitasking, system zazwyczaj miał przerwanie sprzętowe, zwykle timer, aby wymusić plon.
W systemie Windows 95, klawiatura i mysz generowały przerwania, poruszanie myszą powodowało wystrzelenie przerwania i obsługę kolejki zdarzeń przez system operacyjny. Forma wielozadaniowości z wyprzedzeniem, zamiast stałego przerwania timera, ty to robiłeś.
OS będzie aktualizować status na ekranie na przerwanie, a następnie przejść do obsługi innych zadań. Aktualizacja ekranu sprawiłaby, że wydawałoby się, że OS przetwarzał szybciej.
EDIT - 1/2 w prawo ... Nie można wyprzedzać wielozadaniowości aplikacji Win16, ponieważ używa tego samego modelu maszyny wirtualnej systemu (VM) jak w Windows 3.1 do uruchamiania aplikacji Win16. Tak więc, Windows 95 powróci do kooperacyjnego środowiska wielozadaniowego podczas uruchamiania aplikacji Win16 i da im wyłączną kontrolę nad procesorem tak długo, jak długo aplikacje są wykonywane. W rezultacie, prawdziwe działanie z pre-emptive jest niemożliwe podczas multitaskingu mieszanki aplikacji Win16 i Win32.