Zlib | Node.js v9.2.0 Documentation
Note that all zlib APIs except those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications.
スレッドプール数は UV_THREADPOOL_SIZE
環境変数で変えられて、ドキュメント によてばデフォルトは4とのことです。なお同期メソッドの場合はスレッドは使われないとあります。また fs
や crypto
の一部のメソッドも同様にworker threadで実行されるようです。
考えてみればCPUバウンドなzlibを単に非同期にするのは意味がないわけですが、この暗黙のworker threadのことは全然知らなかったので驚きました。
WebAssemblyをNodeJS Native Addonの配布形式として使う - Islands in the byte stream みたいなことをする場合はこのworker threadは使えないので、たとえば単にnodejsの標準モジュールzlibをwasmに置きかえるだけだとマルチコアを活かせないぶん不利になる可能性がありますね。