私はあるスタートアップ企業で業界特化型のSaaSをRuby on Railsで開発しています。そのSaaSには店舗に予約する機能があり、当初はシンプルな空き枠計算ロジックだったのですが、創業3年目に顧客ニーズに応えるため、より複雑なロジックが必要となりました。動的計画法などを用いることでニーズを満たす機能は作れましたが、そのままでは十分な速度が出ませんでした。
「マルチスレッド化すれば良いのでは?」と考えましたが、そこでRuby(CRuby)にはGVL(Global VM Lock)がある事を知りました。新しいロジックは、複雑な組み合わせを計算するCPUバウンドな処理であったため、マルチスレッド化してもGVLの制約により速度改善は期待できないと分かりました。
本セッションでは、私たちが直面したCPUバウンドな処理の問題とそれをどう解決したのかについてお話しします。Webアプリケーションは一般的にI/Oバウンドと言われますが、急に特定の機能でCPUバウンドな処理が必要になるかもしれません。同様の課題に直面した際の参考になれば幸いです。