マルチスレッドで重い処理を実行するサンプル
負荷による処理の遅延を防ぐために処理を別スレッドで行う
サンプルそこそこ処理が重そうな形態素解析を行うkuromoji.jsを使った
詳細な計測はしてないが、体感ではほぼ変わりないような感じがする
そもそもkuromoji.jsがかなり高速だからかもしれない
初回実行時だけ辞書ファイルの読み込みに若干時間がかかるがそれ以降は数ミリ秒と非常に高速
#TODO おそらくこの例では意味がないので、(なるべく実用的で)本当に重い処理に変える
関連
worker.jsconst workerpool = require('workerpool')
const kuromoji = require('kuromoji')
// 形態素解析をするための辞書を読み込む
kuromoji.builder({
dicPath: 'node_modules/kuromoji/dict',
}).build((error, tokenizer) => {
if (error) throw error
// 文字列を受け取って形態素解析する関数を作成
const tokenize = text => tokenizer.tokenize(text)
// 関数を呼び出せるように公開する
workerpool.worker({ tokenize })
})
index.jsconst Discord = require('discord.js')
const client = new Discord.Client()
const workerpool = require('workerpool')
// worker.jsを読み込む
const pool = workerpool.pool('./worker.js')
client.on('message', async message => {
if (message.author.bot) return
// worker.jsで公開したtokenize関数を別スレッドで実行する
const tokens = await pool.exec('tokenize', [message.content])
message.channel.send(tokens.map(token => token.surface_form).join(' '))
})
client.login()
実行結果