最近遇到线程池的问题,默认mongodb为每个连接(即new 出的一个连接对象)分配了一个线程池,里面最多有10个线程,网上说可以通过MongoOpection的connectionPerHost参数来调整线程池的大小,但是实际上无论我怎么修改这个参数的值线程池的大小都是10,请问这个是为什么,是不是有什么地方也要修改?
另外,对于一个网页的应用,是客户端每次点击界面产生一个连接(new一个连接的对象)的设计好,还是在程序开始的时候new一个连接,然后分配给它较大的线程池,每次客户连接就从线程池里面取一个的方式好? 个人感觉第一种在高并发的情况下对系统的负载较高。
PHP中文网2017-04-24 09:14:41
その理由は自分で見つけました:
1 使用されている JAVA ドライバーのバージョンが古すぎるため、デフォルトのスレッド数は 10 です。バージョンは 2.2 で、最新バージョンは 2.12 です。1 つの接続のデフォルトのスレッド プールは 100 に設定されています
。
2 公式ドキュメントで示されている提案は、接続を開いてからスレッド プールから接続を取得することです
3 MongoOperation クラスはバージョン 2.12 で廃止されましたが、connectionPerHost パラメータを設定すると、表面上は接続パラメータのスレッド プールのスレッド数を変更できますが、実際にはシステム バックグラウンドのスレッド プールの上限が変更されます。は 100 のままで、パラメータは有効になりません (別の設定方法があるのかな) が、個人的には、スレッド プールが常に 100 を超えて占有できる場合は、おそらく何か問題があると思います。システム設計