我想了解的基礎知識,多線程,因此我建立了一個小程序,提出了幾個問題,我會感謝任何幫助:)試圖瞭解在C#中的多線程
這裏是小程序:
class Program
{
public static int count;
public static int max;
static void Main(string[] args)
{
int t = 0;
DateTime Result;
Console.WriteLine("Enter Max Number : ");
max = int.Parse(Console.ReadLine());
Console.WriteLine("Enter Thread Number : ");
t = int.Parse(Console.ReadLine());
count = 0;
Result = DateTime.Now;
List<Thread> MyThreads = new List<Thread>();
for (int i = 1; i < 31; i++)
{
Thread Temp = new Thread(print);
Temp.Name = i.ToString();
MyThreads.Add(Temp);
}
foreach (Thread th in MyThreads)
th.Start();
while (count < max)
{
}
Console.WriteLine("Finish , Took : " + (DateTime.Now - Result).ToString() + " With : " + t + " Threads.");
Console.ReadLine();
}
public static void print()
{
while (count < max)
{
Console.WriteLine(Thread.CurrentThread.Name + " - " + count.ToString());
count++;
}
}
}
我檢查這個與一些測試運行:
我做出了最大數量100,這似乎是最快的執行時間爲2個線程是快80%比10個線程的時間要多。
問題:
1)主題4-10不打印,甚至有一段時間,這怎麼可能呢?
2)不應該有更多的線程更快?
我做了最大數字10000和禁用打印。
有了這個配置,5個線程似乎是最快的。
爲什麼與第一次檢查相比有變化?
而且在此配置中(打印時),所有線程都打印幾次。爲什麼與只有少量線程打印的第一次運行不同?
是否有辦法讓所有線程一個一個的打印?在一行或類似的東西?
非常感謝您的幫助:)
請勿直接使用線程。這看起來可能違反直覺,但請相信我:他們會讓你生氣。如果我是你,我會研究C#的任務並行庫(TPL)。 –
[同步]快速概述(http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29)。 – ChaosPandion
這種測試不適合理解性能問題。你有很多閱讀要做。 –