Możesz dowiedzieć się, która zdolność (tj. Rdzeń procesora) wątku Haskell działa, dzwoniąc pod numer threadCapability
z Control.Concurrent
.
Jeśli prowadzisz swój program z +RTS -N
, będzie jeden wątek OS-poziom (HEC) zrodził się na rdzeń, więc liczba możliwości zwrócony przez threadCapability
powie, który OS nici Twój forkIO
zielony wątek jest uruchomiony. Jeśli jednak jednoznacznie określasz liczbę wątków systemu operacyjnego za pomocą +RTS -Nn
, gdzie n
jest liczbą całkowitą inną niż liczba rdzeni w systemie, prawdopodobnie będzie to mniej użyteczne dla ciebie.
Może się okazać, że ThreadScope będzie przydatny do debugowania i wizualizacji wykonywania programów równoległych.
Dokładnie tego chciałem. Dziękuję Ci! – Jonatan
Jeszcze jedna rzecz, o której powinienem był wspomnieć: należy pamiętać, że system operacyjny może dowolnie zmieniać kolejność wątków na różne rdzenie, więc funkcja threadCapability dwukrotnie wywoływana w tym samym wątku Haskell ma niewielką szansę na zwrócenie różnych wartości, co staje się bardziej prawdopodobne, ponieważ więcej czasu upływa między połączeniami. Możesz tego uniknąć w celu debugowania, jeśli zablokujesz wątek do określonego rdzenia, odradzając wątek za pomocą 'forkOn' zamiast' forkIO'. – bitbucket