Share via


ThreadPool.SetMinThreads(Int32, Int32) Metode

Definisi

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.

Berlaku untuk

Lihat juga