Skip to content

使用线程池

由于线程的创建和销毁需要非常大的性能开销,在 WindowsNT 内核的操作系统上,每个进程都会包含一个线程池。线程池由 CLR 管理。

.NET 提供 System.Threading.ThreadPool 类型来提供关于线程池的操作。

常用的有下面 3 个静态方法:

  1. public static bool QueueUserWorkItem;

  2. public static bool QueueUserWorkItem;

  3. public static bool UnsafeQueueUserWorkItem;

示例代码

点击查看代码
csharp
using System;
using System.Threading;

namespace ThreadPoolSample
{
    class Program
    {
        static void Main(string args)
        {
            string taskinfo = "运行 10 秒";
            // 插入一个新的请求到线程池
            bool result = ThreadPool.QueueUserWorkItem(DoWork, taskinfo);
            // 分配线程有可能失败
            if (!result)
            {
                Console.WriteLine("分配线程失败");
            }
            else
            {
                Console.WriteLine("按回车可结束线程");
            }
            Console.Read();
        }

        /// <summary>
        /// 线程的方法
        /// 必须符合 WaitCallback 委托的声明
        /// </summary>
        /// <param name="state"></param>
        private static void DoWork(object state)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("工作者线程的任务是:{0}", state.ToString());
                Thread.Sleep(1000);
            }
        }
    }
}

输出结果

点击查看输出结果

按回车可结束线程
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒
工作者线程的任务是:运行 10 秒

如果在程序运行过程中按下回车键,程序会立即中止。

这说明主线程和插入的工作者线程完全并行,并且线程池中的线程是后台线程的特性。

总结

  1. System.Threading.ThreadPool 类型封装了线程池的操作。

  2. 每个进程都拥有一个线程池,.NET 提供了线程池的管理机制,用户只需要把线程需求插入到线程池中,而不必再理会后续的工作。

  3. 所有线程池中的线程都是后台线程,它们不会阻碍程序的退出。

Page Layout Max Width

Adjust the exact value of the page width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the page layout
A ranged slider for user to choose and customize their desired width of the maximum width of the page layout can go.

Content Layout Max Width

Adjust the exact value of the document content width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the content layout
A ranged slider for user to choose and customize their desired width of the maximum width of the content layout can go.