在不使用Emscripten几年之后,我最近发现它现在支持将多线程C ++代码编译为WebAssembly。我整理了简单的合并排序代码,对1000万个浮点数进行了排序(本机代码可以轻松对更多排序,但浏览器似乎将内存限制为1GB)
https://github.com/bsergeev/MtMergeSort
令人惊讶的是,尽管此代码可编译为WebAssembly并在Chrome中运行,但随着使用多个线程,浏览器中的排序变得越来越慢(而按预期,单线程性能是本机线程的1.5 ... 2倍) :本机代码1.80秒,WebAssembly 3.1 ... 3.3秒和JavaScript 4.69秒):
浏览器限制WebWorkers导致的多线程性能下降吗?但是,WebAssembly中的多个线程又有什么意义呢?