ThreadPool.SetMinThreads(Int32, Int32) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengatur jumlah minimum utas yang dibuat kumpulan utas sesuai permintaan, saat permintaan baru dibuat, sebelum beralih ke algoritma untuk mengelola pembuatan dan penghancuran utas.
public:
static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static bool SetMinThreads (int workerThreads, int completionPortThreads);
static member SetMinThreads : int * int -> bool
Public Shared Function SetMinThreads (workerThreads As Integer, completionPortThreads As Integer) As Boolean
Parameter
- workerThreads
- Int32
Jumlah minimum utas pekerja yang dibuat kumpulan utas sesuai permintaan.
- completionPortThreads
- Int32
Jumlah minimum utas I/O asinkron yang dibuat kumpulan utas sesuai permintaan.
Mengembalikan
true
jika perubahan berhasil; jika tidak, false
.
Contoh
Contoh berikut menetapkan jumlah minimum utas pekerja menjadi empat, dan mempertahankan nilai asli untuk jumlah minimum utas penyelesaian I/O asinkron.
using namespace System;
using namespace System::Threading;
int main()
{
int minWorker;
int minIOC;
// Get the current settings.
ThreadPool::GetMinThreads( minWorker, minIOC );
// Change the minimum number of worker threads to four, but
// keep the old setting for minimum asynchronous I/O
// completion threads.
if ( ThreadPool::SetMinThreads( 4, minIOC ) )
{
// The minimum number of threads was set successfully.
}
else
{
// The minimum number of threads was not changed.
}
}
using System;
using System.Threading;
public class Test
{
public static void Main()
{
int minWorker, minIOC;
// Get the current settings.
ThreadPool.GetMinThreads(out minWorker, out minIOC);
// Change the minimum number of worker threads to four, but
// keep the old setting for minimum asynchronous I/O
// completion threads.
if (ThreadPool.SetMinThreads(4, minIOC))
{
// The minimum number of threads was set successfully.
}
else
{
// The minimum number of threads was not changed.
}
}
}
Imports System.Threading
Public Class Test
<MTAThread> _
Public Shared Sub Main()
Dim minWorker, minIOC As Integer
' Get the current settings.
ThreadPool.GetMinThreads(minWorker, minIOC)
' Change the minimum number of worker threads to four, but
' keep the old setting for minimum asynchronous I/O
' completion threads.
If ThreadPool.SetMinThreads(4, minIOC) Then
' The minimum number of threads was set successfully.
Else
' The minimum number of threads was not changed.
End If
End Sub
End Class
Keterangan
Metode ini tidak didukung ketika kumpulan utas Windows dikonfigurasi untuk digunakan alih-alih kumpulan utas .NET. Untuk informasi selengkapnya, lihat pengaturan konfigurasi kumpulan utas Windows.
Kumpulan utas menyediakan utas pekerja baru atau utas penyelesaian I/O sesuai permintaan hingga mencapai minimum untuk setiap kategori. Ketika minimum tercapai, kumpulan utas dapat membuat utas tambahan dalam kategori tersebut atau menunggu hingga beberapa tugas selesai. Dimulai dengan .NET Framework 4, kumpulan utas membuat dan menghancurkan utas untuk mengoptimalkan throughput, yang didefinisikan sebagai jumlah tugas yang selesai per satuan waktu. Terlalu sedikit utas mungkin tidak memanfaatkan sumber daya yang tersedia secara optimal, sedangkan terlalu banyak utas dapat meningkatkan ketidakcocokan sumber daya.
Ketika permintaan rendah, jumlah aktual utas kumpulan utas dapat berada di bawah nilai minimum.
Jika Anda menentukan angka negatif atau angka yang lebih besar dari jumlah maksimum utas kumpulan utas aktif (diperoleh menggunakan GetMaxThreads), SetMinThreads mengembalikan false
dan tidak mengubah salah satu nilai minimum.
Secara default, jumlah minimum utas diatur ke jumlah prosesor. Anda dapat menggunakan SetMinThreads untuk meningkatkan jumlah minimum utas, seperti untuk sementara mengatasi masalah di mana beberapa item kerja yang diantrekan atau tugas memblokir utas kumpulan utas. Penyumbatan tersebut terkadang menyebabkan situasi di mana semua utas penyelesaian pekerja atau I/O diblokir (kelaparan). Namun, meningkatkan jumlah minimum utas dapat menurunkan performa dengan cara lain, seperti:
- Kumpulan utas mungkin menjadwalkan lebih banyak utas pekerja, bahkan ketika utas pekerja tidak diblokir. Oversubscription dapat menyebabkan utas yang dijadwalkan tertunda secara signifikan karena mereka menunggu dalam antrean panjang untuk mendapatkan ipotong waktu lain, menunda beberapa item kerja atau tugas.
- Utas pekerja mungkin membutuhkan lebih banyak waktu CPU dalam menghapus antrean item kerja karena harus memindai lebih banyak utas untuk mencuri pekerjaan.
- Peralihan konteks antar utas dapat meningkatkan penggunaan CPU.
- Pengumpulan sampah mungkin membutuhkan lebih banyak waktu CPU dalam berjalan tumpukan utas.
- Proses ini dapat mengonsumsi lebih banyak memori.
Perhatian
SetMinThreads Menggunakan metode untuk meningkatkan jumlah minimum utas dapat menyebabkan masalah performa seperti yang dijelaskan dalam teks sebelumnya. Dalam kebanyakan kasus, kumpulan utas akan berkinerja lebih baik dengan algoritmanya sendiri untuk mengalokasikan utas. Mengurangi minimum hingga kurang dari jumlah prosesor juga dapat merusak performa.