Profilowanie (śledzenie) uruchomionego programu wielowątkowego jest o wiele trudniejsze, ale również niemożliwe. Celem całego śledzenia jest sprawienie, aby środowisko uruchomieniowe było lepsze niż kompilator optymalizujący. Jeśli wątki są ze sobą powiązane, wówczas JIT, który zamierza zmodyfikować kod, musi zrozumieć nie tylko sposób wykonania kodu, ale także efekty uboczne na innych wątkach.
Gdy wątek ma mieć dostęp do dużego pliku w pamięci, tworzy drugi poziom pamięci podręcznej, który powoduje, że wątek drugi jest zwalniany z przyczyny, która jest zewnętrzna dla kodu, który jest uruchomiony. JIT musi zrozumieć te interakcje. W przeciwnym razie może spędzić dużo czasu próbując zoptymalizować wątek drugi, gdy ulepszenia w wątku drugim będą wynikać z faktu, że wątek jeden kod negatywnie wpływa na wątek drugi i próbuje wyeliminować efekt bufora podręcznego.
Czy rozważasz próbę napisania własnego, wielowątkowego JIT? Można to zrobić, ale jest w to zaangażowany.
. NET obsługuje jit wielordzeniowy. Ale generalnie nie jest to rozwiązanie uniwersalne, może mieć tylko zauważalny wpływ, gdy rdzenie są zajęte jitowaniem. Wymaga to maszyny czasu, która wie, jaka metoda może być później wykorzystana. Rozwiązany w .NET przez rejestrowanie danych profilu, kolejność, w jakiej wykonywane są metody. Tak więc * następny * czas działania programu może zostać przerwany z wyprzedzeniem. Maszyny czasowe są trudne, mówią, że ludzie mają hoverboards i latające samochody w 2015 roku. Cóż, hoverboards okazały się prawdziwe. –
@HansPassant - Używanie wątków tła do kodu kompilacji JIT jest interesujące, nie wiedziałem, że .NET ma tę funkcję. Jednak nawet przed dodaniem tej funkcji użytkownicy mogli tworzyć wiele wątków - tak więc JSI .NET był już wymagany do kompilowania kodu na wielu wątkach. AFAIK jednak .NET nadal JIT-kompiluje jedną metodę na raz.Moje pytanie dotyczy właśnie [Tracing JITs] (https://en.wikipedia.org/wiki/Tracing_just-in-time_compilation): czy istnieją przeszkody techniczne dla JT śledzącego, który kompiluje wiele wątków (w tle lub do obsługuje wątki wielu użytkowników)? – user200783