首页新闻找找看学习计划

Task.Factory.StartNew创建线程问题

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

通过

Task.Factory.StartNew创建线程有没有限制的,我的应用里用该方法开启多个线程,发现后面调用这个方法创建线程很慢很慢,这里是不是有什么限制,如何可以设置这些限制参数?

李.net的主页 李.net | 小虾三级 | 园豆:1170
提问于:2017-09-05 19:54
< >
分享
所有回答(5)
0

Task为线程池的封装模式。

池那就必定有限制,池可以设定大小。

如果每个线程是满载,那么最优值就是核的数量(如果核又做了线程的,那么再乘以该数值)。

花飘水流兮 | 园豆:10527 (专家六级) | 2017-09-05 20:30
0

本来这个意思就是系统的线程有多少你不要管。

你想要干嘛就干。够不够用是系统的系统。

吴瑞祥 | 园豆:28729 (高人七级) | 2017-09-05 20:39
0

有限制,直接设置ThreadPool的几个静态方法就可以了。

但默认情况下没人去改这个玩意,你最好确认这几点:1.你是在你所谓的StartNew的时候慢么?2.你为什么需要上k的线程来干活?这里是否可以考虑换种方式

Daniel Cai | 园豆:10374 (专家六级) | 2017-09-06 10:32
0

1、Task用的是线程池,线程池的线程数量的有上限的,这个可以通过ThreadPool修改

2、Task.Factory.StartNew不是直接创建线程,创建的是任务,它有一个任务队列,然后通过任务调度器把任务分配到线程池中的空闲线程中,如果任务的数量比线程池中的线程多,线程池的线程数量还没有到达上限,就会创建新线程执行任务。如果线程池的线程已到达上限,没有分配到线程的任务需要等待有线程空闲的时候才执行。

我也才刚学不久,大概理解是这样的。

海之殇 | 园豆:472 (菜鸟二级) | 2017-09-06 13:56
0

有上限的。

CharyGao | 园豆:238 (菜鸟二级) | 2017-11-17 18:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册