Apakah saya benar mengatakan bahwa untuk Aplikasi Web, wadah web menangani multi-threading?
Sebagian besar webservers (Java dan lainnya, termasuk JBoss) mengikuti model "satu utas per permintaan", yaitu setiap permintaan HTTP diproses sepenuhnya dengan tepat satu utas. Utas ini akan sering menghabiskan sebagian besar waktu menunggu hal-hal seperti permintaan DB. Wadah web akan membuat utas baru jika diperlukan.
Beberapa server (dalam ekosistem Java terutama Netty ) melakukan penanganan permintaan tidak sinkron, baik dengan model "satu utas melakukan segalanya", atau sesuatu yang lebih kompleks. Gagasan dasarnya adalah bahwa memiliki banyak utas menunggu menghabiskan sumber daya, sehingga bekerja secara serempak dapat lebih efisien.
Jika demikian, dapatkah saya memperkenalkan tapak baru di aplikasi Berbasis Web?
Itu mungkin, tetapi harus dilakukan dengan sangat hati-hati, karena kesalahan (seperti kebocoran memori atau sinkronisasi yang hilang) dapat menyebabkan bug yang sangat sulit untuk diperbanyak, atau menjatuhkan seluruh server.
Apakah ada keuntungan dalam melakukannya dan dalam skenario apa seseorang perlu melakukan itu?
Nah, keuntungannya adalah Anda bisa melakukan hal-hal secara paralel. Menggunakan utas untuk meningkatkan kecepatan komputasi murni adalah sesuatu yang tidak boleh Anda lakukan pada server web, karena itu akan memperlambat penanganan permintaan lainnya. Hal semacam itu harus dilakukan pada server yang terpisah, mungkin menggunakan semacam antrian pekerjaan.
Skenario yang sah untuk multithreading dalam konteks menangani permintaan HTTP mungkin jika Anda perlu mengakses sumber daya jaringan lain, misalnya memanggil beberapa layanan web yang berbeda. Jika Anda melakukannya dalam satu thrad, Anda harus menunggu setiap panggilan selesai pada gilirannya. Tetapi jika Anda menggunakan banyak utas, total waktu tunggu hanyalah penundaan untuk satu panggilan paling lambat.
Concurrency Utilities
.