Czytam i uczę się o ThreadScheduler
oraz artykułach dotyczących zadań i natknąłem się na funkcję ThreadPool.UnsafeQueueUserWorkItem
używaną w jednym z MSDN examples na temat własnych aplikacji ThreadSchedulers. W MSDN description about UnsafeQueueUserWorkItem istnieje duże ostrzeżenie, że funkcja może być luką bezpieczeństwa i że "nie propaguje stosu wywołującego".UnsafeQueueUserWorkItem i co dokładnie oznacza "nie propaguje stos wywołujący"?
Jedynym linkiem jest QueueUserWorkItem
, który - od nazwy - wydaje się być "bezpiecznym odpowiednikiem"? ale nie wspomina nic o wywoływaniu stosów.
Co to właściwie znaczy propagować stos? Skopiuj go przed rozpoczęciem pracy? Dlaczego inny wątek i tak wymaga stosu wątku wywołującego? Zakładam, że zaczynają od świeżego i pustego stosu. W końcu, gdy funkcja wątku powraca, nie kontynuuje wykonywania funkcji planowania zadania, prawda?
Ah, rozumiem. Bardzo interesujące. Teraz ... czy ma to jakąś różnicę wydajności, gdy _nie_ działa w jakimkolwiek środowisku bezpieczeństwa? – Imi
Nie tak jak to działa, kontrole CAS są zawsze wykonywane. Stos spacerów ma stały koszt, który zależy od głębokości stosu. "Koszt" to wielkie słowo, mówimy tutaj o kilku mikrosekundach. Nie ma to znaczenia, dopóki nie uruchomisz * tysięcy * żądań wątku TP na sekundę. –
_Mówimy o garstce mikrosekund tutaj_ Woah .. dzięki za komentarz. W takim razie lepiej wyprofiluj mój prototyp niestandardowego programu planującego wątek. Zdecydowanie nie mogę _nie żyć z czymś w zakresie "mikrosekund". – Imi