并行任务在docker内运行速度非常慢

问题描述 投票:0回答:1

我的本地笔记本电脑有 4 核和 32GB RAM。

我的 EC2 采用 c5.8xlarge - 32 核和 64GB GB。

我有一份运行一些并行进程的工作。这是一段有代表性的代码。

 Parallel.ForEach(jobList, new ParallelOptions() { MaxDegreeOfParallelism = 10 }, job=>{
    //each job includes parameters for a year to do some work for each month
    
     var subTasks = new List<Task>();
     for (var m = 1; m < 13; m++){
          var subTasks = Task.Factory.StartNew(() =>{
               //process task
               //each task include HTTP calls, SQL process, S3 csv loads and save
          });
          subTasks.Add(subTasks);
     }
     Task.WaitAll(subTasks.ToArray());
 });

当我在本地计算机上运行代码时,需要 30-40 秒。但是,我在 EC2 服务器上运行,需要超过 150 秒。我将我的项目部署为 EC2 上的 docker 容器。在我的本地,我在 IIS Express 上运行代码。

此外,我还测试了双方单任务性能内的流程。在 EC2 上,单个任务花费的时间比我本地的要少。如果一个任务在我的本地需要 10 秒,那么在 EC2 上需要 6 秒。

有谁知道出现这种差异的可能原因吗?与热身申请有关吗?

注意: 问题是一台弱的本地计算机如何能够比强的服务器快 4 倍。也就是说,我的代码在我的本地计算机上运行得很快。但在服务器中,运行速度慢了4倍。为什么?

我的本地和服务器之间有两个结构差异。 Docker + nginx 和 IIS Express。服务器容量、带宽、网络距离均优于本地。

c# multithreading docker parallel-processing
1个回答
0
投票

你的代码与HTTP相关,也就是说它与网络连接速度(带宽)有关。与从个人计算机到 HTTP 服务器的连接相比,EC2 服务器和 HTTP 服务器之间的数据传输可能更慢。这只是一种可能!

© www.soinside.com 2019 - 2024. All rights reserved.