Накладные расходы на облегченные потоки Haskell и их использование на многоядерных процессорах

Я читал книгу" Real World Haskell ", главу о параллелизме и параллелизме. Мой вопрос такой: следует:

  • Поскольку потоки Haskell на самом деле представляют собой всего лишь несколько «виртуальных» потоков внутри одного «реального» потока ОС, означает ли это, что создание их большого количества (например, 1000) не окажет значительного влияния на производительность? Т.е. можно ли сказать, что накладные расходы, связанные с созданием потока Haskell с помощью forkIO , (почти) незначительны? Если возможно, приведите практические примеры.

  • Разве концепция легких потоков не мешает нам использовать преимущества многоядерных архитектур? Насколько я понимаю, два потока Haskell не могут выполняться одновременно на двух отдельных ядрах, потому что они действительно являются одним потоком с точки зрения операционной системы. Или среда выполнения Haskell делает какие-то хитрые трюки, чтобы обеспечить возможность использования нескольких процессоров?

58
задан Don Stewart 1 May 2011 в 17:55
поделиться