Beberapa orang akan mengatakan bahwa dua utas terlalu banyak - saya tidak cukup di kamp itu :-)
Ini saran saya: ukur, jangan menebak. Satu saran adalah membuatnya dapat dikonfigurasi dan pada awalnya set ke 100, kemudian lepaskan perangkat lunak Anda ke alam liar dan pantau apa yang terjadi.
Jika penggunaan utas Anda mencapai 3, maka 100 terlalu banyak. Jika tetap di 100 untuk sebagian besar hari, menabraknya hingga 200 dan melihat apa yang terjadi.
Anda sebenarnya dapat memiliki kode Anda sendiri memantau penggunaan dan menyesuaikan konfigurasi untuk kali berikutnya dimulai tetapi itu mungkin berlebihan.
Untuk klarifikasi dan elaborasi:
Saya tidak menganjurkan menggulirkan subsistem penggabungan thread Anda sendiri, dengan cara apa pun gunakan yang Anda miliki. Tapi, karena Anda bertanya tentang titik cut-off yang baik untuk utas, saya menganggap implementasi kumpulan utas Anda memiliki kemampuan untuk membatasi jumlah maksimum utas yang dibuat (yang merupakan hal yang baik).
Saya telah menulis utas dan kode penyatuan koneksi basis data dan mereka memiliki fitur-fitur berikut (yang saya percaya sangat penting untuk kinerja):
- jumlah minimum utas aktif.
- jumlah maksimum utas.
- mematikan utas yang belum digunakan untuk sementara waktu.
Yang pertama menetapkan dasar untuk kinerja minimum dalam hal klien kumpulan thread (jumlah utas ini selalu tersedia untuk digunakan). Yang kedua menetapkan batasan pada penggunaan sumber daya oleh utas aktif. Yang ketiga mengembalikan Anda ke baseline dalam waktu tenang sehingga meminimalkan penggunaan sumber daya.
Anda perlu menyeimbangkan penggunaan sumber daya memiliki utas yang tidak terpakai (A) terhadap penggunaan sumber daya karena tidak memiliki cukup utas untuk melakukan pekerjaan (B).
(A) umumnya penggunaan memori (tumpukan dan sebagainya) karena utas yang tidak bekerja tidak akan menggunakan banyak CPU. (B) umumnya akan menunda pemrosesan permintaan saat mereka tiba karena Anda perlu menunggu utas tersedia.
Itu sebabnya Anda mengukur. Saat Anda menyatakan, sebagian besar utas Anda akan menunggu tanggapan dari database sehingga tidak akan berjalan. Ada dua faktor yang memengaruhi berapa banyak utas yang harus Anda izinkan.
Yang pertama adalah jumlah koneksi DB yang tersedia. Ini mungkin merupakan batas yang sulit kecuali Anda dapat meningkatkannya di DBMS - Saya akan menganggap DBMS Anda dapat mengambil jumlah koneksi yang tidak terbatas dalam hal ini (walaupun Anda idealnya juga harus mengukurnya).
Kemudian, jumlah utas yang Anda miliki tergantung pada penggunaan historis Anda. Minimum yang harus Anda jalankan adalah angka minimum yang pernah Anda jalankan + A%, dengan minimum absolut (misalnya, dan membuatnya dapat dikonfigurasi seperti A) 5.
Jumlah utas maksimum adalah histori maksimum + B% Anda.
Anda juga harus memantau perubahan perilaku. Jika, karena alasan tertentu, penggunaan Anda mencapai 100% dari yang tersedia untuk waktu yang signifikan (sehingga akan mempengaruhi kinerja klien), Anda harus meningkatkan maksimum yang diizinkan sampai sekali lagi B% lebih tinggi.
Menanggapi "apa tepatnya yang harus saya ukur?" pertanyaan:
Apa yang harus Anda ukur secara spesifik adalah jumlah maksimum utas yang digunakan secara bersamaan (mis., Menunggu pengembalian dari panggilan DB) yang sedang dimuat. Kemudian tambahkan faktor keamanan 10% misalnya (ditekankan, karena poster lain tampaknya mengambil contoh saya sebagai rekomendasi tetap).
Selain itu, ini harus dilakukan di lingkungan produksi untuk penyetelan. Tidak apa-apa untuk mendapatkan perkiraan sebelumnya, tetapi Anda tidak pernah tahu produksi apa yang akan terjadi (itulah sebabnya semua hal ini harus dapat dikonfigurasi saat runtime). Ini untuk menangkap situasi seperti pengganda tak terduga dari panggilan klien yang masuk.