C# 使用Parallel.ForEach在不破坏程序顺序的情况下实现并行
我正在努力使我的C#应用程序尽可能快地运行 我没有访问应用程序源代码的权限,但允许它使用C#进行扩展,所以我正在这样做。我不知道这是否有什么区别 此外,它必须每秒运行10次以上。性能对我来说非常重要,所以我决定使用C# 使用Parallel.ForEach在不破坏程序顺序的情况下实现并行,c#,asynchronous,parallel-processing,C#,Asynchronous,Parallel Processing,我正在努力使我的C#应用程序尽可能快地运行 我没有访问应用程序源代码的权限,但允许它使用C#进行扩展,所以我正在这样做。我不知道这是否有什么区别 此外,它必须每秒运行10次以上。性能对我来说非常重要,所以我决定使用Parallel.ForEach() 如何定义一个顺序(我不是说数组的原始顺序),这样事情就不会变得复杂? 这是我的密码: string[] MyThings = {}; // There are 300 names in this array. System.Threading.T
Parallel.ForEach()
如何定义一个顺序(我不是说数组的原始顺序),这样事情就不会变得复杂?
这是我的密码:
string[] MyThings = {}; // There are 300 names in this array.
System.Threading.Tasks.Parallel.ForEach(MyThings, Thing => {
var LastStatus = AppLib.FetchNode(Thing);
// First step. AppLib.FetchNode() sends my Node.js server a request,
// Node.js accesses MySQL and returns a response.
// Second step. I access application specific data here using LastStatus value,
// but it shouldn't run before the first step is finished.
var SendStatus = AppLib.SendNode(data1, data2, data3);
// Third and last step. SendNode() sends some data to my Node.js server,
// but it shouldn't run before the second step is finished.
});
如果有订购要求,它可能是不可并行的。@PeterRitchie,谢谢!我要找的术语是什么?你的问题是“我从亚马逊订购了300本书,我想让它们更快到达,所以我雇佣了20名职员等待书籍到达。这将使它们到达的速度加快20倍,对吗?”如果工作是“阅读这300本书”,那么雇佣20人可以使工作完成的速度加快20倍。但是,如果工作是“等待他们到来”,那么雇佣更多的人来等待并不能让东西更快到达。换句话说,并行性是关于提高处理器限制问题的性能。异步工作流是关于在IO限制的问题中提高处理器利用率的。这两种方法都不能使网卡或数据库服务器更快地工作,当然也不能提高信号在铜线中传播的速度。@salep我们没有足够的信息知道这个问题的答案。如果有订购要求,它可能无法并行。@PeterRitchie,谢谢!我要找的术语是什么?你的问题是“我从亚马逊订购了300本书,我想让它们更快到达,所以我雇佣了20名职员等待书籍到达。这将使它们到达的速度加快20倍,对吗?”如果工作是“阅读这300本书”,那么雇佣20人可以使工作完成的速度加快20倍。但是,如果工作是“等待他们到来”,那么雇佣更多的人来等待并不能让东西更快到达。换句话说,并行性是关于提高处理器限制问题的性能。异步工作流是关于在IO限制的问题中提高处理器利用率的。两者都不能使网卡或数据库服务器更快地工作,当然也不能提高信号在铜线中传播的速度。@salep我们没有足够的信息知道这个问题的答案。