重複の可能性:
タスクとスレッドの違いは何ですか?
タイトル自体が重複した質問のように見えることは理解していますが、このトピックに関連する以前の投稿をすべて読みましたが、プログラムの動作はまだよくわかりません。
現在、約 1,000 の電子メール アカウントをチェックする小さなプログラムを作成しています。各スレッド/タスクの計算コストは高くありませんが、各スレッドの継続時間はネットワーク I/O に大きく依存しているため、間違いなくマルチスレッドまたはマルチタスクが正しいアプローチであると感じています。
そのようなシナリオでは、スレッド/タスクの数をコア数よりもはるかに多く設定することも合理的であると思います。(i5-750 の場合は 4 つ)。したがって、スレッドまたはタスクの数を 100 に設定しました。
タスクを使用して記述されたコード スニペット:
const int taskCount = 100;
var tasks = new Task[taskCount];
var loopVal = (int) Math.Ceiling(1.0*EmailAddress.Count/taskCount);
for (int i = 0; i < taskCount; i++)
{
var objContainer = new AutoCheck(i*loopVal, i*loopVal + loopVal);
tasks[i] = new Task(objContainer.CheckMail);
tasks[i].Start();
}
Task.WaitAll(tasks);
スレッドを使用して記述された同じコード スニペット:
const int threadCount = 100;
var threads = new Thread[threadCount];
var loopVal = (int)Math.Ceiling(1.0 * EmailAddress.Count / threadCount);
for (int i = 0; i < threadCount; i++)
{
var objContainer = new AutoCheck(i * loopVal, i * loopVal + loopVal);
threads[i] = new Thread(objContainer.CheckMail);
threads[i].Start();
}
foreach (Thread t in threads)
t.Join();
runningTime.Stop();
Console.WriteLine(runningTime.Elapsed);
では、これら2つの本質的な違いは何ですか?