Я читал книгу "Real World Haskell", главу concurrency и parallelism. Мой вопрос следующий:
-
Так как потоки Haskell на самом деле являются просто несколькими "виртуальными" потоками внутри одного "реального" OS-потока, значит ли это, что создание многих из них (например, 1000) не окажет существенного влияния на производительность? I.e., можно ли сказать, что накладные расходы, связанные с созданием потока Haskell с
forkIO
, (почти) незначительны? Если возможно, приведите примеры действий. -
Разве концепция легких потоков не позволяет нам использовать преимущества многоядерных архитектур? Насколько я понимаю, невозможно, чтобы два потока Haskell выполнялись одновременно на двух отдельных ядрах, поскольку они представляют собой один единственный поток с точки зрения операционной системы. Или время выполнения Haskell делает некоторые хитроумные трюки, чтобы обеспечить использование нескольких процессоров?