首页 新闻 会员 周边

Task与多线程的基础知识,希望各位帮忙解惑

0
悬赏园豆:20 [待解决问题]

1.Task这个类主要是为了解决什么问题?跟多核CPU有关么?

2.Task的机制是啥 ,是如何去调用分配线程的?

3.Task的优缺点是什么?

4.如何有效的使用Task?

     各位帮忙指点一二,

问题补充:

有相关的链接可以推荐么?

行走千里的主页 行走千里 | 初学一级 | 园豆:184
提问于:2016-02-01 11:21
< >
分享
所有回答(3)
-1

http://www.google.com 这个就挺好的,比较全面。

但是建议你还是买本书看先。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-01 11:45

每当我在博客园里看到http://www.google.com 这句话,通常就会看到你的ID“爱编程的大叔”~~~

支持(2) 反对(0) 飞翔の金雕 | 园豆:364 (菜鸟二级) | 2016-02-01 19:24
0

Task是异步的一种封装方式。

异步分为两种:

1、CPU密集型

2、IO密集型。

其中CPU密集型是与CPU多核计算有关,可以利用多核和多线程的方式来最大限度利用CPU资源

而IO密集型是封装底层硬件的线程调度,来节省工作线程的等待时间,最大限度节约工作线程的占用时间。

Task底层封装的是线程池的线程,每次启动一个Task底层都会从线程池中分配一个线程去执行任务。

如果你的程序不是上面两种应用,不建议使用Task,以为线程的切换时有很大成本的。

更多可以参考:https://msdn.microsoft.com/zh-cn/library/dd460693(v=vs.110).aspx 

埋头前进的码农 | 园豆:118 (初学一级) | 2016-02-01 11:47

Task可不是对线程池的封装,Task实际上要理解为对操作的一种特殊封装,它可能会用到线程,也可能使用你当前线程,具体是依赖于你TaskScheduler来确定的。而TaskScheduler就如同其名,确定了并行,异步,抢占线程和多线程下的控制。使用Task后可以将以前繁琐的各种异步多线程问题给抽象化,甚至代码逻辑上的线性,相对于传统的通过IAsyncResult或者Thread而言简单了不少。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-02-03 17:37

@Daniel Cai: 不管是使用当前线程还是什么线程,其实说到底都是对线程池中的线程进行调度。有错吗?

支持(0) 反对(0) 埋头前进的码农 | 园豆:118 (初学一级) | 2016-02-03 17:58

@埋头前进的码农: 不是,不一定会使用线程池中线程,这个有较大的变数的.

比如最简单的场景,当你显式指定某个task是longrunning的(比如超过50ms的操作),那么相当于给了一个hint,这个时候task就会直接使用新线程来执行。

var tk=new Task(()=>
    {
    Console.WriteLine (Thread.CurrentThread.IsThreadPoolThread);    
    },TaskCreationOptions.LongRunning);
    tk.Start();
支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-02-04 10:27
0

 建议你先了解什么是多线程,再来看这个,你这样反着来很麻烦的.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-02-01 14:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册