我正在为我的C#类做一个任务,任务是使用多线程和单个线程对一组包含大约100万个条目的8个列表进行排序。我的单线程函数完全正常运行,平均执行时间约为750毫秒。
据我所知,多线程应该使这个过程运行得更快,但是我的执行平均执行时间大约为650毫秒。给出了示例执行时间(显然它们不会相同)但是多执行/单一的比率是6.因此我认为我的实现遇到了(可能的)问题。
我宣布我的初始主题:
Thread multiThreaded = new Thread(() => singleListSortWorker(data2));
multiThreaded.Start();
所以这将调用
下面的singleListSortWorker函数private void singleListSortWorker(List<List<int>> lists)
{
Stopwatch s = new Stopwatch();
s.Start();
List<Thread> threads = new List<Thread>();
foreach(var list in lists)
{
Thread t = new Thread(() => doSortOnSingleList(list));
threads.Add(t);
t.Start();
}
foreach(var thread in threads)
{
thread.Join();
}
s.Stop();
//SetTextBox2 is a thread safe function used to set the text in my field
SetTextBox2("Multi-Threaded sort: " + s.Elapsed.Milliseconds + "ms." + System.Environment.NewLine);
}
正如您所看到的,它为每个列表启动了一个具有以下功能的新线程:
private void doSortOnSingleList(List<int> list)
{
list.Sort();
}
所以基本上我正在创建一个线程,为每个列表生成一个新线程,连接每个线程以确保正确测量执行然后完成。
我的实施是否存在问题,或者这是一种相对不错的方式吗?