Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 16497|Jawab: 5

[Sumber] Konkurensi multithread .NET/C# menggunakan lubang HttpWebRequest

[Salin tautan]
Dipaparkan pada 2021-12-20 15:21:04 | | | |
Saat melakukan penjadwalan tugas, tugas penjadwalan adalah mensimulasikan memulai permintaan HTTP, dan menemukan bahwa ketika ada lebih banyak tugas, penjadwalan tugas tampaknya seperti kematian palsu.

Jumlah default maksimum koneksi yang diminta pada sistem Windows normal adalah 2, dan pada sistem operasi server, defaultnya adalah 10. Jika Anda tidak mengubah batas koneksi bersamaan ini,Kemudian jumlah koneksi http yang dapat dilakukan klien secara bersamaan hanya 2 atau 10

System.Net.ServicePointManager.DefaultConnectionLimit Ini adalah jumlah maksimum koneksi yang bisa mendapatkan pengaturan default saat ini, seperti yang ditunjukkan pada gambar di bawah ini:



Apakah ada batas konkurensi default untuk HttpClient?

Sebelum .Net 4.0, operasi Http diandalkan oleh HttpWebRequest. Ini memiliki maksimum 2 batas konkurensi yang sangat konservatif untuk situs yang sama secara default, yang sering menyebabkan HttpWebRequests tidak mendapatkan kecepatan ideal secara default (saya kira strategi ini membuat frustrasi banyak pembuat kode), dan nilai App.config atau ServicePointManager.DefaultConnectionLimit harus dimodifikasi.

MS memperkenalkan kelas HttpClient di .Net 4.5 untuk menangani operasi Http, dan saya pikir HttpClient dan HttpWebRequest mengikuti kebijakan yang sama. Hari ini, ketika menulis program unduhan multi-utas, saya menggunakan 10 koneksi bersamaan dan menemukan bahwa HttpClient tidak memiliki batas jumlah bersamaan secara default.

Awalnya saya pikir itu. Net 4.5 menghapus batas konkurensi ini (bagaimanapun, pada dasarnya tidak ada yang mengikuti standar ini sekarang), dan kemudian menulis ulang kode yang relevan dengan WebRequest, dan menemukan bahwa itu masih 2 batas konkurensi, dan nilai ServicePointManager.DefaultConnectionLimit juga 2. Artinya, HttpClient tidak dikendalikan oleh kebijakan konkurensi HttpWebRequest, dan tidak ada batas konkurensi tingkat sistem.

Selain itu, selama pengujian, saya menemukan bahwa HttpWebRequest tidak default ke maksimum 2 konkurensi untuk semua alamat. MisalnyaTidak ada batas konkurensi untuk koneksi alamat HTTP lokal (http://localhost/*).

Panggilan lingkungan multithread C# ke batas koneksi bersamaan HttpWebRequest

HttpWebRequest atau WebClient .net memiliki batas koneksi bersamaan dalam kasus multithreading, yaitu 2 secara default pada sistem operasi desktop seperti Windows XP dan Windows 7, dan 10 secara default pada sistem operasi server. Jika Anda tidak mengubah batas koneksi bersamaan ini, jumlah koneksi HTTP yang dapat dibuat klien pada satu waktu hanya 2 atau 10. Untuk beberapa aplikasi, seperti browser atau spider, jumlah 2 atau 10 konkurensi terlalu kecil dan sangat mempengaruhi kinerja aplikasi. Batas koneksi bersamaan ini disebabkan oleh standar HTTP 1.0 dan HTTP 1.1 yang menentukan maksimum 2 koneksi bersamaan. Namun, browser arus utama tidak lagi mengikuti aturan ini, tetapi kerangka kerja .NET masih mengikuti aturan ini secara default.

Banyak artikel mengatakan bahwa mengakses HttpWebRequest secara asinkron dapat meningkatkan performa bersamaan, tetapi saya telah menguji bahwa jika Anda tidak mengubah jumlah default koneksi bersamaan, performa akses sinkron atau asinkron tidak baik.

Kita juga dapat mengatur jumlah maksimum koneksi bersamaan di app.config sebagai berikut:

Artikel referensi

Login hyperlink terlihat.
Login hyperlink terlihat.





Mantan:Xshell Xftp Untuk terus menggunakan program ini, Anda harus menerapkan yang terbaru...
Depan:Maven mendorong paket jar pihak ketiga ke repositori pribadi Nexus
Dipaparkan pada 2021-12-26 17:20:57 |
Belajar belajar。。。。。
Dipaparkan pada 2022-1-10 08:42:47 |
Belajar belajar。。。。。
Dipaparkan pada 2022-3-8 15:58:54 |
Belajar...
 Tuan tanah| Dipaparkan pada 2023-2-18 21:47:09 |
Selain itu, solusinya

 Tuan tanah| Dipaparkan pada 2023-3-10 21:21:15 |
Konfigurasikan melalui web.config

Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com