我创建了多线程应用程序:
http://blog.milrr.com/2010/03/code-c-simple-multithreading-example.html
它有很多性能问题。看起来,每个线程一个接一个地执行。
1个线程完成时间为1-2秒,30个线程的完成时间为35-40秒。
请告诉我可能存在的问题。
我正在使用.net framework 3.5。
由于
答案 0 :(得分:1)
该示例不创建30个线程,它为线程池创建30个任务。池本身通常会保持它使用的线程数接近系统中的核心数。
假设您有2个核心。这意味着池不会安排超过2-3个同时运行的任务,这意味着如果您创建30个任务,您的运行时间将不会快于单个线程应用程序顺序运行任务的一半时间。这是有道理的,因为假设您可以使用2个核心(除少数特定情况除外)优于2倍加速,这是荒谬的。
此外,该示例未显示任何有意义的计算。它只是创建了一定数量的任务来完成孤立的计算。您创建的任务越多,完成所需的时间就越多,这就是为什么您看到增加的运行时间,您创建的任务就越多。
简而言之:
答案 1 :(得分:0)
多线程有利于I / O操作以及必须等待资源的操作,或者在等待长时间运行的过程中提供更好的用户体验。
但是线程有自己的开销,如果不正确使用会降低速度。
答案 2 :(得分:0)
答案 3 :(得分:-1)
你可以这样做,
private List<Thread> myThreads = new List<Thread>();
在这里,您构建了一个线程列表,以便在您执行线程的过程中将其添加到上面的列表中....
foreeach ( Thing i want to start multiple times)
{
var thrd = new Thread(aThread);
myThreads.Add(aThread);
aThread.Start();
}
接下来,您调用一个等待线程加入的方法...
WaitUntilAllThreadsComplete();
private void WaitUntilAllThreadsComplete()
{
foreach (Thread t in myThreads)
{
t.Join();
}
}
这样的东西..对不起,它很模糊......但可能有帮助???
答案 4 :(得分:-2)
简单地说,线程是邪恶的。您只想在特定情况和代码的特定部分中使用线程。已经提到的一个很好的例子是随机的,非常长的任务,一旦执行就完全与程序的其余部分无关,但需要完成。