После того, как Emscripten не использовался в течение нескольких лет, я недавно обнаружил, что он теперь поддерживает компиляцию многопоточного кода C ++ в WebAssembly.Я собрал простой код сортировки слиянием, который сортирует 10 миллионов операций с плавающей запятой (собственный код может легко сортировать больше, чем это, но браузеры, кажется, ограничивают вас до 1 ГБ памяти):
https://github.com/bsergeev/MtMergeSort
Удивительно, но хотя этот код компилируется в WebAssembly и выполняется в Chrome, сортировка в браузере замедляется при использовании нескольких потоков (в то время как производительность одного потока, как и ожидалось, в 1,5 ... 2 раза ниже, чем собственная: собственный код1,80 секунды, WebAssembly 3,1 ... 3,3 секунды и JavaScript 4,69 секунды):
Это снижение производительности в нескольких потоках, вызванное замедлением работы браузераWebWorkers?Но в чем тогда смысл нескольких потоков в WebAssembly?