私はそうのように、注入によるJDBC接続を取得すると仮定すると、 SQLステートメント(Slick先物に似ています)を実行するときにブロックされないようにしますか?プール内の接続数が多いという事実は、SQL文がブロックされないことを意味しますか?プレイフレームワーク+ JDBC +先物
答えて
未来を使うことは、ノンブロッキングと同義ではありません。 Futuresでは、一般的に、別のスレッドまたはあるタイプのエグゼキュータでコードを実行することができます。ただし、実行するコードはブロックされます。
JDBCはブロッキングAPIです。これは、JDBCを介してクエリを実行すると、データベースからの応答を待つ間、呼び出しスレッドがブロックされることを意味します。これの別の用語は、同期です。ノンブロッキングまたは非同期 APIは非同期的に応答を受け取り、呼び出し側のスレッドをアクティブに待たずに解放します。 Reactive slickは独自のドライバを使用してデータベースからの応答を非同期で受け取ります。つまり、クエリがデータベースに送出されるとすぐに呼び出しスレッドを解放できます。
2つの違いはこれです:
さんがあなたのJDBCの全てが先物に呼び出しをラップするとしましょう、あなたのアプリケーションは、その後、サイズ100のデータベース接続プール、およびサイズ10の固定スレッドプールを持っている想像してみて。コントローラSqlQuery
に複数のJDBC呼び出しを同時に行うメソッドがあるとしましょう。これらのクエリはすべて、スレッドプールが使い果たされるまで並列に実行されます。つまり、任意の時点で同時に10個のクエリしか実行できないことを意味します。呼び出し元スレッドはJDBC呼び出しによってブロックされませんが、呼び出しスレッドはそれらを実行します。十分なクエリが並行して実行されると、スレッドプールが使い果たされ、プール内にいくつの接続があったかはもはや問題になりません。スレッドプールを大きくするか、必要に応じて展開するフォーク結合プールを使用することでこれに対処できますが、新しいスレッドの作成やコンテキスト切り替えによるパフォーマンスコストが発生する可能性があります。結局のところ、あなたのCPUは限られています。
リアクティブ・スリックのような非同期データベース・ドライバーを使用すると、限られたスレッド・プールがブロックされず、プール内の接続(この例では100個)と同じ数の照会を同時に実行できます。スレッドがブロックされないようにするということは、応答を待っているだけのCPU時間を節約できるということです。他のリクエストの処理を続けるために使用できます。
- 1. プレイフレームワークJDBCのebean mysqlの例外だが
- 2. 先物組成
- 3. Scalaの先物
- 4. 先物と約束
- 5. セルロイド俳優 - 先物
- 6. NHibernate先物対CreateMultiCriteria
- 7. スカラ先物のマッピング
- 8. Scalaの先物先物を使う方法
- 9. 人物APIの連絡先
- 10. python先物とタプルのアンパック
- 11. AJAX先物はドラッグ&ドロップ、クロム
- 12. Scalatra 2.1 Akka先物の例
- 13. 収集先物はAPScheduler
- 14. Akka先物の例外
- 15. は、ネストされた先物
- 16. Pythonのタイプと先物
- 17. MVC2先物既存System.Web.Mvc
- 18. プレイフレームワーク:DB接続プールシャットダウン
- 19. プレイフレームワーク - テストPOSTコントローラメソッド
- 20. スカラプレイフレームワークの非同期アクションでの先物の結合/連鎖
- 21. プレイフレームワーク:HTML
- 22. カフカストリームで先物を使うには
- 23. 一連の先物によるスキャラキャッチスクロール
- 24. のstd ::先物および例外
- 25. アメリトレードAPIストリーミング先物 - シンボル命名規則
- 26. Scalaの先物およびマルチスレッド
- 27. スカラ先物順次怠惰実行
- 28. Clojure先物を理解する
- 29. スカラ先物の例外処理
- 30. 別のスカラ先物構成パズル
[Slick plain SQL queries ](http://slick.lightbend.com/doc/3.1.0/sql.html)を使用していますか? – ps0604