C# Parallel 循环多线程操作
来源:互联网 发布:数据库的主要特点是 编辑:程序博客网 时间:2024/05/29 19:41
using System;using System.Drawing;using OpenTK;using OpenTK.Graphics;using OpenTK.Graphics.OpenGL;using OpenTK.Input;using System.Runtime.InteropServices;using System.Threading;using System.Threading.Tasks;using System.Linq;namespace Example{ class MyApplication { public static void Main() { Parallel.For(0, 500000000000000, i => { Console.WriteLine(i); }); } }}
这样的for循环就是使用了多线程,和c++里的OpenMP类似。
运行图:
然后是运行时的cpu占用率:
下图是正常的使用for循环输出时的cpu占用率:
可见,对cpu的使用效率提升了很多。
也可以使用ParallelLoopState.Break来进行控制
如下:
using System;using System.Drawing;using OpenTK;using OpenTK.Graphics;using OpenTK.Graphics.OpenGL;using OpenTK.Input;using System.Runtime.InteropServices;using System.Threading;using System.Threading.Tasks;using System.Linq;namespace Example{ class MyApplication { public static void Main() { Parallel.For(0, 500000000000000,(i,loopstate) => { Console.WriteLine(i); if (i == 100) //当i==100时跳出 loopstate.Break(); }); } }}
PLINQ
使用起来很简单,就是在集合后加个AsParallel()。
public static void Main() { var numbers = Enumerable.Range(0, 100); var result = numbers.AsParallel().AsOrdered().Where(i => i % 2 == 0); foreach (var i in result) Console.WriteLine(i); }
但这样得到的第二个数组并不是按顺序排的:
想得到按顺序的可以在后面再加个AsOrdered():
public static void Main() { var numbers = Enumerable.Range(0, 100); var result = numbers.AsParallel().AsOrdered().Where(i => i % 2 == 0); foreach (var i in result) Console.WriteLine(i); }
0 0
- C# Parallel 循环多线程操作
- C# 并行循环Parallel.For
- C#多线程 为多核处理器而生的多线程方法Parallel.For和Parallel.ForEach
- Parallel.ForEach() 并行循环
- Parallel.ForEach() 并行循环
- Oracle Parallel 多线程
- Perl多线程Parallel::ForkManager
- Parallel多线程使用
- Oracle Parallel 多线程
- 构建多线程应用程序2 Parallel 并行类:Parallel.ForEach()、Task异步操作类:Task.Factory.StartNew()、并行LINQ查询: AsParallel()
- C# 多线程操作
- C#多线程操作
- C# 多线程操作TreeView
- C# 多线程操作控件
- C# 多线程操作控件
- c# BackGroundWorker 多线程操作
- C# 多线程--原子操作
- c# Parallel并行运算
- 创业多想一秒,做事少磕十年
- 在less上写css3动画
- python2.7 遇到的字符集问题
- android studio 下的LitePal 混淆处理
- web.xml加载顺序
- C# Parallel 循环多线程操作
- 【马哥2016全新】LINUX就业班
- 4. Median of Two Sorted Arrays
- (socket-nio-netty学习-2)Netty基础入门
- 20套项目实战视频
- codevs 1365_浴火银河星际跳跃_并查集
- Java 并发专题 : Executor详细介绍 打造基于Executor的Web服务器
- JavaWeb总结十四、JSP原理
- UTF8和Unicode关系及转换