多线程 线程池 Task

多线程概念?优点及缺点?
多线程是指程序中包含多个执行流(线程),即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

概括:多线程让程序同时运行多个线程,多个线程并行执行(执行时无顺序)

优点:
可以提高CPU的利用率。大大提高了程序的运行效率

缺点:
a.线程也是程序,所以线程运行需要占用计算机资源,线程越多占用资源也越多。(占内存多)
b.多线程需要协调和管理,所以需要CPU跟踪线程,消耗CPU资源。(占cpu多)
c.线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。(多线程存在资源共享问题)
d.线程太多会导致控制太复杂,最终可能造成很多Bug。(管理麻烦,容易产生bug)

线程池?
.NET Framework2.0时代,出现了一个线程池ThreadPool,是一种池化思想,如果需要使用线程,就可以直接到线程池中去获取直接使用,如果使用完毕,在自动的回放到线程池去;

概括:.net 2.0出现线程池,线程池中可以存在多个线程,让线程池来自动管理。

好处:解决了部分Thread管理不便的问题,移除了无用的Thread API。提高线程运行性能。

线程池重要API:QueueUserWorkItem(Callback,data)

 Task任务?
Task在.net 4.0时出现,是在线程池基础上封装而来的,提供了对线程的延续,取消,等待,超时等方面功能。

 Task实例化及启动?取消任务?
实例化及启动:
new Task(各种参数).Start();
Task.Run(各种参数)
Task.Factory.StartNew(各种参数);

取消:
CancellationTokenSource类,CancellationToken结构
CancellationTokenSource cts = new CancellationTokenSource();
cts.Cancel()、cts.IsCancellationRequested属性、cts.Token属性

延迟,等待?
Task.Delay(100).Wait(); // 延迟并等待,注意延迟执行也是异步的。
t.Wait() //等待,会阻塞主线程
Task.WaitAny()等待任务数组中任意一个任务完成。result任务数组中第一个完成的任务索引。
Task.WaitAll()等待所有的任务完成,没有返回值
Task.WhenAny()当任务数组中任意一个任务完成的时候,去做其他事情。返回值Task<T>
Task.WhenAll()当任务数组中所有任务都完成的时候,才去做其他事情。返回值Task

分线程状态判断?
t.IsCanceled线程执行是否被取消,
t.IsCompleted线程执行是否完成,
t.IsFaulted线程执行是否出现异常,
t.Status线程运行时的各种状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值