并行任务比单个任务需要更长的时间

Parallel task takes longer than single task

我正在尝试创建并行任务。任务调用相同的方法。方法正在处理一些值。

示例代码如下:

private OpcClient client = new OpcClient();

    private void starttask()
    {
        client = new OpcClient("opc.tcp://172.16.100.1:55105");
        client.Connect();

        List<string> mytask = new List<string>();
        mytask.Add("process1");
        mytask.Add("process2");

        Parallel.For(0, 2, new ParallelOptions { MaxDegreeOfParallelism = 2 }, i =>
        {
            mymethod(mytask[i]);

        });

    }

    private string mymethod(string node)
    {
           OpcNodeInfo machineNode = client.BrowseNode(node);
            string val = "";
            foreach (var childNode in machineNode.Children())
            {
                string _node = childNode.NodeId.ValueAsString;
               val = client.ReadNode("ns=6;s=" + _node).ToString();
                Console.WriteLine("Value = " + val);
            }

            return val;
    }

问题是当我在没有任务的情况下调用此方法时,处理时间假设为 7 秒,但并行调用这需要两倍多一点,所以假设 15 秒。该方法正在为 task1 和 task2 处理相同的数据,但来自不同的地方(地址)...

这是为什么?不应该是两个任务是同时完成的还是我遗漏了什么?

这似乎是 IO 绑定。

PLC是否支持并发读取?听起来像是瓶颈。

尝试从两个不同的 PLC 读取,您也可能会更快地获得结果。

如果您只是在 mymethod() 中添加一些虚拟计算(或 Thread.Sleep()),您会发现它并行运行得更快。