有效率和有效率

时间:2019-06-06 13:19:24

标签: c# .net multithreading

我对以下代码的区别有疑问:  我将展示首先与普通for循环一起使用的代码。

Guesser类构造函数开始混合字符数组,并且startBruteForce调用该函数,以在密钥中对它进行排列以与私有密码匹配的适当长度。对于每个新密钥,我都设置了Console.Write (key); 每个循环的结果都不相同。

DateTime timeStarted = DateTime.Now;
Console.WriteLine("Start BruteForce - {0}", timeStarted.ToString());
                for (int i = 0; i < Environment.ProcessorCount; i++)
                {
                    Guesser guesser = new Guesser();        
                    Thread thread = new Thread(guesser.startBruteForce);
                    thread.Start();
                }
                while (!Guesser.isMatched) ;
Console.WriteLine("Time passed: {0}s", DateTime.Now.Subtract(timeStarted).TotalSeconds);

和Parallel.For

DateTime timeStarted = DateTime.Now;
Console.WriteLine("Start BruteForce - {0}", timeStarted.ToString());
                      Parallel.For(0, Environment.ProcessorCount , (i) =>
                              {
                                  Guesser guesser = new Guesser();
                                  guesser.startBruteForce();
                             });
                        while (!Guesser.isMatched) ;        
    Console.WriteLine("Time passed: {0}s", DateTime.Now.Subtract(timeStarted).TotalSeconds);

ParallelFor中,它类似于:a,b,c,d,e,f...ab,ac,ad... 在正常的foor循环中,例如b,r,1,a,k,b,ed的排列要多得多 看起来ParrarelFor仅创建了一个线程。

Normal for循环执行暴力算法的速度比Parallel.For循环快。

我的问题是为什么会这样。

  1. 令我感兴趣的另一件事是,为什么我将迭代次数限制为Environment.ProcessorCount/2,这两种算法的执行时间都比仅进行不变的Environment.ProcessorCount迭代要快。

0 个答案:

没有答案