0
点赞
收藏
分享

微信扫一扫

.NET高级面试指南专题五【线程池】

NicoalsNC 2024-02-07 阅读 8
.net面试

在这里插入图片描述

线程池介绍:

线程池的主要作用包括:

创建线程涉及到用户模式和内核模式的切换,内存分配,DLL通知等一系列过程,线程销毁的步骤也是开销很大的,所以如果应用程序使用完一个线程,我们能把线程暂时存放起来,以备下次使用,就可以减小这些开销。

所有进程使用一个共享的线程池,还是每个进程使用独立的线程池

线程池中线程的分类

工作线程(Compute-bound Threads):

ThreadPool.QueueUserWorkItem(state => 
{
    // 工作线程的代码(计算密集型任务)
});

I/O线程(I/O-bound Threads):

需要注意的是,线程池中的线程可以同时执行工作线程和I/O线程的任务,具体的线程分类取决于任务的性质和执行方式。

常用的线程池的示例:
下面是一些常见的线程池使用的C#代码示例,包括使用ThreadPool类和Task类:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        // 使用 ThreadPool.QueueUserWorkItem 启动线程池中的工作线程
        ThreadPool.QueueUserWorkItem(state => 
        {
            Console.WriteLine("工作线程执行中...");
            // 执行工作线程的代码
        });

        // 阻止主线程退出,以便查看工作线程的执行
        Console.ReadLine();
    }
}

使用 Task 类:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // 使用 Task.Run 启动任务
        Task.Run(() => 
        {
            Console.WriteLine("任务执行中...");
            // 执行任务的代码
        });

        // 阻止主线程退出,以便查看任务的执行
        Console.ReadLine();
    }
}

使用 Task 类并等待任务完成:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // 使用 Task.Run 启动异步任务,并使用 await 等待任务完成
        await Task.Run(() => 
        {
            Console.WriteLine("异步任务执行中...");
            // 执行异步任务的代码
        });

        // 主线程继续执行其他操作
        Console.WriteLine("主线程继续执行...");

        // 阻止主线程退出,以便查看任务的执行
        Console.ReadLine();
    }
}

.NET线程池有什么不足

举报

相关推荐

0 条评论