C#ThreadPool学习

C#ThreadPool学习

目录

C#ThreadPool学习

一.简介

二.主要方法

三.使用

1.QueueUserWorkItem

 四.workerThreads和completionPortThreads


 一.简介

提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器

注意:线程池中启动的线程都是后台线程

回到顶部

二.主要方法

 

GetAvailableThreads(Int32, Int32)

线程池中空闲线程数,检索由 GetMaxThreads(Int32, Int32) 方法返回的最大线程池线程数和当前活动线程数之间的差值。

GetMaxThreads(Int32, Int32)

检索可以同时处于活动状态的线程池请求的数目。 所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。

GetMinThreads(Int32, Int32)

发出新的请求时,在切换到管理线程创建和销毁的算法之前检索线程池按需创建的线程的最小数量。

QueueUserWorkItem(WaitCallback)

将方法排入队列以便执行。 此方法在有线程池线程变得可用时执行。

QueueUserWorkItem(WaitCallback, Object)

将方法排入队列以便执行,并指定包含该方法所用数据的对象。 此方法在有线程池线程变得可用时执行。

SetMaxThreads(Int32, Int32)

设置可以同时处于活动状态的线程池的请求数目。 所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。

SetMinThreads(Int32, Int32)

发出新的请求时,在切换到管理线程创建和销毁的算法之前设置线程池按需创建的线程的最小数量。

回到顶部

三.使用

1.QueueUserWorkItem

(1)回调不带参数

1

2

3

4

5

6

7

8

9

10

private static void fun2(){

    for (int i = 0; i < 10; i++){

        ThreadPool.QueueUserWorkItem(new WaitCallback(t =>{

            Console.WriteLine($"Thread ThreadId:{Thread.CurrentThread.ManagedThreadId}");

        }));

    }

}

  运行结果:

(2)回调带参数

1

2

3

4

5

6

7

8

9

10

private static void fun1(){

    for (int i = 0; i < 10; i++){

        ThreadPool.QueueUserWorkItem(new WaitCallback(t =>{

            Console.WriteLine($"Thread {t} ThreadId:{Thread.CurrentThread.ManagedThreadId}");

        }), i);

    }

}

  运行结果:

 四.workerThreads和completionPortThreads

 CLR线程池分为工作者线程(workerThreads)与I/O线程(completionPortThreads)两种:

(1)workerThreads:工作者线程是主要用作管理CLR内部对象的运作,通常用于计算密集的任务

(2)completionPortThreads:I/O(Input/Output)线程主要用于与外部系统交互信息,如输入输出。

参考:

https://www.cnblogs.com/kissdodog/archive/2013/03/28/2986026.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值