我对以下代码的区别有疑问: 我将展示首先与普通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
循环快。
我的问题是为什么会这样。
Environment.ProcessorCount/2
,这两种算法的执行时间都比仅进行不变的Environment.ProcessorCount
迭代要快。