C# 这怎么可能?平行的,奇怪的
我有两台不同规格的服务器,但它们都运行相同的应用程序 服务器1是一个2 x 2.4 Ghz的Hyper-V,服务器是一个VPS,具有2 x Intel Xeon CPU E5540 2.53Ghz 我有一个通用处理程序,它从表单中获取一些内容,并使用parallel.For以并行方式处理一些对象列表上的一些数据。我使用默认的MaxDegreeOfParallelism。没什么奇怪的 但是。。。当我启用一些日志来找出为什么第二台服务器比第一台服务器做的事情更好(更快)时,结果与您通常认为的实际情况不一致 “问题”是,我有来自服务器1的日志,如下所示(摘录): ÖVERKALIX->table.选择[1]:78.125毫秒双精度。添加范围:0毫秒 结果[0]:0ms ÖVERKALIX->table.选择[1]:62.5毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 ÖVERTORNEÅ->表格。选择[1]:62.5毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 ÖVERTORNEÅ->表格。选择[1]:78.125毫秒双精度。添加范围:0毫秒 结果[0]:0ms 总服务器TID att exekvera 592 frågor:20062.5毫秒 和第二个类似的日志(节选): ÖVERKALIX->table.选择[1]:99毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 ÖVERKALIX->table.选择[1]:103毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 ÖVERTORNEÅ->表格。选择[1]:100毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 ÖVERTORNEÅ->表格。选择[1]:104毫秒双精度。添加范围:0毫秒结果 [0]:0毫秒 总服务器TID att exekvera 592 frågor:4479毫秒 如果你看它,你会发现这里有些奇怪。第一台服务器执行所有单个查询的速度比第二台服务器快,但所有查询的总时间比第二台服务器长 为什么? 您通常会认为,如果有n个操作要完成,并且每个操作需要t ms,那么操作的总时间不应该超过如果您有n个操作,并且每个操作需要(例如)(t+1)ms 但不管怎样,我们这里的日志说t>(t+1)是真的。我很失望!嗯,我不是专家,但那是不可能的:) 那么,你对此有何看法 是因为一些超阅读的东西吗 是不是因为在第一台服务器上生成新线程需要更多的时间(这似乎是最合理的答案) 如果这是由于线程创建问题造成的,有什么方法可以衡量这一点吗 更新: 我已经深入研究了这个问题,出现了一种模式。以下是来自服务器1的一些数据(时间单位为毫秒): 78.125 187.5 78.125 93.75 750 62.5 62.5 62.5 78.125 46.875 78.125 46.875 1203.125 62.5 1125 78.125 2500 62.5 46.875 78.125 62.5 62.5 1484.375 62.5 62.5 1437.5 62.5 78.125 下面是在服务器2上执行的相同查询: 104 104 156 116 117 116 114 115 112 107 110 112 164 128 128 124 112 111 99 104 109 105 241 115 116 115 112 112 如您所见,服务器1速度更快,但有时(如值:1203.125、1484.375和2500)比服务器2花费的时间要长得多 因此,似乎服务器1在一小部分查询上更快,而服务器2更快(更平滑?)还是在一大部分查询上更快 从这些数字可以得出什么结论吗 为什么我们会看到这些差异C# 这怎么可能?平行的,奇怪的,c#,performance,linq,parallel-processing,C#,Performance,Linq,Parallel Processing,我有两台不同规格的服务器,但它们都运行相同的应用程序 服务器1是一个2 x 2.4 Ghz的Hyper-V,服务器是一个VPS,具有2 x Intel Xeon CPU E5540 2.53Ghz 我有一个通用处理程序,它从表单中获取一些内容,并使用parallel.For以并行方式处理一些对象列表上的一些数据。我使用默认的MaxDegreeOfParallelism。没什么奇怪的 但是。。。当我启用一些日志来找出为什么第二台服务器比第一台服务器做的事情更好(更快)时,结果与您通常认为的实际情况
提前谢谢 这里可能会发生很多事情 首先,我希望服务器2更快。。毕竟它有更快的处理器 不管: 您提到两台服务器都在运行您的应用程序;然而,两者都是虚拟机 这些物理盒子上还运行着什么?或者虚拟机中还运行着什么 它可以是任何东西。可能服务器1也有一个VM,它每隔一段时间运行一个计划作业,占用您的资源。。。可能服务器1有一个完全不同的磁盘阵列,其写缓存不能满足需求,必须每隔一段时间暂停刷新 服务器1的NIC可能因入站/出站数据过载,这同样是由某种类型的计划作业造成的。也许Bob,一个一直乐于助人的系统管理员,喜欢登录服务器1,让它下载他完全合法的msdn软件 关键是,并没有人能够告诉你们发生了什么,因为涉及的变量太多了 我的起点是:
这里有太多的东西可能是