C#多线程学习笔记三

ThreadPool

Thread => 一个异步任务开启一个Thread,具有专有性
ThreadPool => 开启异步任务只需要向其借用线程,使用完后归还

ThreadPool的使用方式

ThreadPool.QueueUserWorkItem((obj) =>
{
var Fun = obj as Func<string>;
Console.WriteLine("子线程:" + Thread.CurrentThread.ManagedThreadId + "  context:" + Fun());
}, new Func<string>(() => "hello world"));
Console.WriteLine("主线程:" + Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();

ThreadPool与Thread的区别

10个任务,用Thread来做,需要开启10个Thread,如果用ThreadPool来做,只需要将10个任务交给线程池。
Thread的解析函数如下:

~Thread()
{
	this.InternalFinalize();
}

从析构函数看到this.InternalFinalize(); 就是说销毁之后,先进入终结器,线程虽然销毁,但是没有被GC(Garbage Collection)回收,该占的资源还是会占。而使用ThreadPool后不会有死线程,而都是默认初始化的。

线程池中的线程:工作线程和IO线程

在这里插入图片描述
工作线程:给一般的异步任务执行,不涉及到网络,文件这些IO操作【开 发者调用】
IO线程:一般用在文件,网络IO上。【CLR调用】

总结

ThreadPool可以用8个线程来解决 thread 10个线程做的事情,节省了空间时间。
时间 => 通知各个托管和非托管的DLL
空间 => teb,osthread结构,堆栈

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值