天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

關于C#線程,線程池和并行運算的簡單使用和對比

前言:看了書上兩個使用C#4.0并行編程的demo,又對照以前收藏的網上幾篇講述線程池的雄文,一并整理,寫個示例總結一下。寫這篇文章的時候,發現關于線程的好幾個基礎的重要的知識點自己都不熟悉,而且可能習慣性認知淺薄,所以痛苦的無以復加,不知道到底要說什么。不想看文章的可以直接下載最后的示例,本文代碼主要參考Marc Clifton的“.NET's ThreadPool Class - Behind The Scenes”,對新手也許有幫助。

  參考:

  http://msdn.microsoft.com/zh-cn/library/system.threading.threadpool(VS.80).ASPx

  http://www.codeproject.com/KB/threads/threadtests.ASPx

  http://www.codeproject.com/KB/threads/smartthreadpool.ASPx

  http://blog.zhaojie.me/2009/07/thread-pool-1-the-goal-and-the-clr-thread-pool.html  (老趙的淺談線程池上中下三篇)

  先大概看一下控制臺應用程序的Main方法的主要代碼:

        static bool done = false;
static decimal count2 = 0;
static int threadDone = 0;//標志啟用線程數?
static System.Timers.Timer timer = new System.Timers.Timer(1000);

static decimal[] threadPoolCounters = new decimal[10];
static Thread[] threads = new Thread[10];
static System.Timers.Timer[] threadTimers = new System.Timers.Timer[10];

static void Main(string[] args)
{
timer.Stop();
/*當 AutoReset 設置為 false 時,Timer 只在第一個 Interval 過后引發一次 Elapsed 事件。
若要保持以 Interval 時間間隔引發 Elapsed 事件,請將 AutoReset 設置為 true。
*/
timer.AutoReset
= false;
timer.Elapsed
+= new ElapsedEventHandler(OnTimerEvent);//當timer.Start()時,觸發事件
decimal total = 0;

// raw test
decimal count1 = SingleThreadTest();//單一線程,一跑到底
Console.WriteLine("Single thread count = " + count1.ToString());

// create one thread, increment counter, destroy thread, repeat
Console.WriteLine();
CreateAndDestroyTest();
//創建一個線程,運算,然后銷毀該線程 重復前面的動作
Console.WriteLine("Create and destroy per count = " + count2.ToString());

// Create 10 threads and run them simultaneously
//一次性創建10個線程,然后遍歷使線程執行運算
Console.WriteLine();
InitThreadPoolCounters();
InitThreads();
StartThreads();
while (threadDone != 10) { };
Console.WriteLine(
"10 simultaneous threads:");
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
"T" + i.ToString() + " = " + threadPoolCounters[i].ToString() + " ");
total
+= threadPoolCounters[i];
}
Console.WriteLine(
"Total = " + total.ToString());
Console.WriteLine();

Console.WriteLine(
"///////////////////////////////////////////////////");

// using ThreadPool
//直接通過線程池的QueueUserWorkItem方法,按隊列執行10個任務
Console.WriteLine();
Console.WriteLine(
"ThreadPool:");
InitThreadPoolCounters();
QueueThreadPoolThreads();
while (threadDone != 10) { };
Console.WriteLine(
"ThreadPool: 10 simultaneous threads:");
total
= 0;
for (int i = 0; i < 10; i++)
{
// threadTimers[i].Stop();
// threadTimers[i].Dispose();
Console.WriteLine("T" + i.ToString() + " = " + threadPoolCounters[i].ToString() + " ");
total
+= threadPoolCounters[i];
}
Console.WriteLine(
"Total = " + total.ToString());

// using SmartThreadPool
//通過Amir Bar的SmartThreadPool線程池,利用QueueUserWorkItem方法,按隊列執行10個任務
Console.WriteLine();
Console.WriteLine(
"SmartThreadPool:");
InitThreadPoolCounters();
QueueSmartThreadPoolThreads();
while (threadDone != 10) { };
Console.WriteLine(
"SmartThreadPool: 10 simultaneous threads:");
total
= 0;
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
"T" + i.ToString() + " = " + threadPoolCounters[i].ToString() + " ");
total
+= threadPoolCounters[i];
}
Console.WriteLine(
"Total = " + total.ToString());

// using ManagedThreadPool
//通過Stephen Toub改進后的線程池,利用QueueUserWorkItem方法,按隊列執行10個任務
Console.WriteLine();
Console.WriteLine(
"ManagedThreadPool:");
InitThreadPoolCounters();
QueueManagedThreadPoolThreads();
while (threadDone != 10) { };
Console.WriteLine(
"ManagedThreadPool: 10 simultaneous threads:");
total
= 0;
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
"T" + i.ToString() + " = " + threadPoolCounters[i].ToString() + " ");
total
+= threadPoolCounters[i];
}
Console.WriteLine(
"Total = " + total.ToString());

// using C#4.0 Parallel
//通過Tasks.Parallel.For進行并行運算
Console.WriteLine();
Console.WriteLine(
"Parallel:");
InitThreadPoolCounters();
UseParallelTasks();
while (threadDone != 10) { };
Console.WriteLine(
"Parallel: 10 simultaneous threads:");
total
= 0;
for (int i = 0; i < 10; i++)
{
Console.WriteLine(
"T" + i.ToString() + " = " + threadPoolCounters[i].ToString() + " ");
total
+= threadPoolCounters[i];
}
Console.WriteLine(
"Total = " + total.ToString());
}

NET技術關于C#線程,線程池和并行運算的簡單使用和對比,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 韩国免费啪啪漫画无遮拦健身教练 | 久久高清一本无码 | 国产亚洲欧洲日韩在线观看 | 99国产在线视频有精品视频 | 最近免费中文字幕大全免费 | 在线国产a不卡 | 久久香蕉国产免费天天 | 色婷婷五月综合久久中文字幕 | 最近日本免费观看MV免费 | 99视频精品全部免费 在线 | 快播金瓶梅 | 亚洲高清在线视频 | 久久人妻无码毛片A片麻豆 久久人妻熟女中文字幕AV蜜芽 | 女王黄金vk | 91成品视频 | 国产精品久久久久久久久齐齐 | 综合人妻久久一区二区精品 | 狠狠色综合7777久夜色撩人 | 中文字幕乱码一区AV久久 | 女人高潮被爽到呻吟在线观看 | 9久久99久久久精品齐齐综合色圆 | 黄色免费网址在线观看 | 久久国产av偷拍在线 | 国产AV精品久久久免费看 | 色噜噜狠狠色综合中文字幕 | 国产AV电影区二区三区曰曰骚网 | 在线亚洲精品国产一区麻豆 | 国产综合自拍 偷拍在线 | 伊人久久亚洲精品一区 | 久热这里只有精品99国产6 | 亚洲欧洲日本无在线码播放 | 欧美性猛交XXXX乱大交极品 | 精品性影院一区二区三区内射 | 亚洲无AV在线中文字幕 | 中文字幕在线视频免费观看 | 国产精品私人玩物在线观看 | 本庄优花aⅴ全部在线影片 被滋润的艳妇疯狂呻吟白洁老七 | 中文文字幕文字幕亚洲色 | 久久久96 | 亚洲日韩欧美国产中文在线 | 久久精品电影院 |