26

scala でフューチャを使用する場合、デフォルトの動作はデフォルトの Implicits.global 実行コンテキストを使用することです。これはデフォルトで、プロセッサごとに 1 つのスレッドを使用できるように思われます。より伝統的なスレッド化された Web アプリケーションでは、Future がデータベースの待機などのタスクを実行している場合 (一部の CPU バインド タスクとは対照的に)、これは不適切なデフォルトのように見えます。

デフォルトのコンテキストをオーバーライドすることは、本番環境ではかなり標準的であると思いますが、それを行うことに関するドキュメントがほとんどないため、それほど一般的ではないようです. 何か不足していますか?

4

3 に答える 3

40

デフォルトの実行コンテキストをオーバーライドすると考える代わりに、代わりに「さまざまなことに複数の実行コンテキストを使用する必要がありますか?」と尋ねてみませんか? それが質問なら、私の答えはイエスです。私が働いている場所では、Akka を使用しています。アプリ内では、ノンブロッキング機能にデフォルトの Akka 実行コンテキストを使用します。次に、現在、非ブロッキングの適切な jdbc ドライバーがないため、すべてのブロッキング SQL 呼び出しは個別の実行コンテキストを使用し、接続ごとのスレッド アプローチを採用しています。メインの実行コンテキスト (フォーク結合プール) をブロックしないようにすることで、スループットが大幅に向上します。

システム内のさまざまな種類の作業に複数の異なる実行コンテキストを使用してもまったく問題ないと思います。それは私たちにとってうまくいきました。

于 2013-05-30T11:22:07.930 に答える