Bagaimana cara menerapkan threadpool? Saya telah membaca di wikipedia untuk "threadpool" tapi saya masih belum bisa mencari tahu apa yang harus dilakukan untuk menyelesaikan pertanyaan ini (mungkin karena saya tidak begitu mengerti apa itu threadpool dalam istilah sederhana).
Dapatkah seseorang menjelaskan kepada saya dalam bahasa Inggris yang sederhana apa itu threadpool dan bagaimana seseorang menjawab pertanyaan ini?
sumber
Thread pool adalah kumpulan dari thread yang dikelola yang biasanya diatur dalam antrian, yang menjalankan tugas dalam antrian tugas.
Membuat objek utas baru setiap kali Anda perlu sesuatu untuk dieksekusi secara sinkron itu mahal. Di kumpulan utas Anda hanya akan menambahkan tugas yang ingin Anda jalankan secara asinkron ke antrian tugas dan kumpulan utas menangani menetapkan utas yang tersedia, jika ada, untuk tugas yang sesuai. Segera setelah tugas selesai, utas yang sekarang tersedia meminta tugas lain (dengan asumsi masih ada).
Kolam utas membantu Anda menghindari membuat atau menghancurkan lebih banyak utas, daripada yang sebenarnya diperlukan.
Saya akan mulai dengan membuat kelas dengan antrian utas dan antrian tugas. Kemudian mengimplementasikan metode yang menambahkan tugas ke antrian tugas dan beralih dari sana. Jelas, Anda juga harus memungkinkan untuk mengatur utas maksimum yang dibolehkan dalam kumpulan utas.
sumber
Dalam aplikasi multithreaded, kumpulan utas adalah "kumpulan utas yang tersedia" yang dapat digunakan oleh aplikasi Anda. Biasanya, misalnya. NET, semuanya dikelola sehingga Anda hanya menetapkan tugas dan sekali utas gratis, ia akan melakukannya. Jadi untuk mengimplementasikan threadpool, saya berharap untuk membuat konsep di mana tugas-tugas secara otomatis diambil oleh utas bebas tanpa pembuatan utas eksplisit untuk setiap tugas.
sumber
Contoh Kehidupan Nyata;
Anda memiliki fasilitas di sana 12 orang bekerja. Ada 3 bagian dari fasilitas ini. Dapur, toilet, dan keamanan. Jika Anda tidak menggunakan teknik thread pool, begitulah cara kerjanya: Ke-12 orang akan berdiri di ruang rapat, jika pelanggan baru datang dengan fasilitas dan meminta tugas, maka Anda akan memisahkan orang dalam kelompok dan mengirim mereka untuk melakukan pekerjaan mereka , dan kembali ke ruang rapat. Tapi, sebelum mereka pergi ke tugas mereka, ada fase persiapan. Mereka perlu mengenakan seragam yang benar, melengkapi perangkat tertentu dan berjalan ke bagian itu, menyelesaikan pekerjaan dan kembali. Jadi, sekali setiap kali mereka menyelesaikan pekerjaan mereka (benang berakhir), mereka harus berjalan kembali ke ruang pertemuan, membuka pakaian seragam, mengambil peralatan dan menunggu pekerjaan berikutnya. Ini merujuk pada menciptakan konteks utas, ini adalah alokasi memori dan informasi pelacakan oleh OS.
Jika Anda menggunakan thread pooling, maka, di pagi hari, Anda akan menugaskan 6 orang ke dapur, 2 orang ke kamar kecil dan 4 orang ke keamanan. Jadi, mereka hanya akan melakukan persiapan sekali sehari. Bahkan jika tidak ada pelanggan di dapur, 4 orang itu akan ada di sana, menganggur, untuk setiap tugas mendatang. Mereka tidak perlu kembali ke ruang rapat sampai dapur ditutup (aplikasi berakhir). Keempat orang ini berada di kumpulan aplikasi Dapur, dan siap melayani dengan cepat. Tetapi, Anda tidak dapat berjanji bahwa mereka bekerja sepanjang hari, karena dapur dapat menjadi waktu menganggur dari waktu ke waktu. Logika yang sama berlaku untuk toilet dan keamanan juga.
Dalam skenario pertama, Anda tidak menyia-nyiakan utas untuk tugas apa pun, TETAPI akan membutuhkan banyak waktu untuk mempersiapkan setiap utas untuk setiap tugas. Di yang kedua, Anda menyiapkan utas sebelumnya, jadi Anda tidak dapat menjamin Anda akan menggunakan semua utas untuk semua tugas, tetapi, sebagian besar OS membuat optimasi yang hebat di atasnya, sehingga Anda dapat dengan aman mengandalkannya.
sumber