.net Parallel并行使用
2024-09-28 09:43:46
因项目响应过慢,代码优化空间不大,在暂时无法调整系统架构的情况下,只有使用.NET中的TPL解决一些模块耗时过多的问题。但在使用过程中也碰到了一些问题,现在把它写下来,用于备忘。
1. Parallel.ForEach的使用
static void Main(string[] args)
{
//Test();
TestParllel();
Console.ReadLine();
} private static void TestParllel()
{
var list = new List<int>(); for (int i = ; i < ; i++)
{
list.Add(i);
}
Parallel.ForEach(list, (p, state) => { Invoke(p); });
} static void Invoke(int i)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
}
未设置最大线程数的情况下:
a>为设置最大线程的情况下,TPL默认线程数为任务数(系统允许的情况下,设置ThreadPool.SetMaxThreads没有效果)。
b> TPL默认启动5个线程,任务数小于5的话,启动任务数个线程。
c> 如果任务较多,TPL在初始化5个线程后,每隔100毫秒左右新增线程,直到达到最大线程数。如果新增线程的过程中有任务完成,那么就不会新增线程。
缺点:线程数无法控制,容易造成高CPU,系统失去响应。
设置了最大线程数的情况下:
private static void TestParllel()
{
var list = new List<int>(); for (int i = ; i < ; i++)
{
list.Add(i);
}
Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = }, (p, state) => { Invoke(p); });
}
设置了最大线程数为2
a> 系统运行可控,不会造成高CPU的情况。
最新文章
- PowerDesigner修改生成mysql视图
- 自动生成build.xml文件
- jQueryEasyUi验证
- SPSS数据分析——t检验
- dede 替换后台两个文件去广告
- eclipse mybatis Generator
- IOS 项目名称修改(XCODE4.6)
- 一个基于Qt的截屏程序
- Android运用自己的标题栏
- Windows下多线程数据同步互斥的有关知识
- Windows Essentials Movie Maker 安装失败报错 ——问题解决
- web安全测试排查
- 一、I/O操作(中文问题)
- python模块之xlwt
- Atitit jquery &#160;1.4--v1.11 &#160;v1.12 &#160;v2.0 &#160;3.0 的新特性
- jQuery ajax的前台代码编写
- JAVA JDBC 简单的增删改查
- 吴裕雄 数据挖掘与分析案例实战(14)——Kmeans聚类分析
- scrapy-yield scrapy.Request()不执行、失效、Filtered offsite request to错误 [转]
- mysql 允许远程登录
热门文章
- Canvas标签基础
- 【调优】Nginx性能调优
- 兼容安卓和ios实现一键复制内容到剪切板
- EOJ Monthly 2018.11 猜价格 (模拟)
- 浅谈EM算法的两个理解角度
- Instruments(性能调优 12.3)
- Java HTTP通信--Get与POST请求
- caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
- quartz-job实现实时或定时发送短信任务
- MyEclipse2014+JDK1.7+Tomcat8.0+Maven3.2 开发环境搭建