中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

關(guān)于C#線程,線程池和并行運(yùn)算的簡(jiǎn)單使用和對(duì)比

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

  參考:

  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  (老趙的淺談線程池上中下三篇)

  先大概看一下控制臺(tái)應(yīng)用程序的Main方法的主要代碼:

        static bool done = false;
static decimal count2 = 0;
static int threadDone = 0;//標(biāo)志啟用線程數(shù)?
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();
/*當(dāng) AutoReset 設(shè)置為 false 時(shí),Timer 只在第一個(gè) Interval 過后引發(fā)一次 Elapsed 事件。
若要保持以 Interval 時(shí)間間隔引發(fā) Elapsed 事件,請(qǐng)將 AutoReset 設(shè)置為 true。
*/
timer.AutoReset
= false;
timer.Elapsed
+= new ElapsedEventHandler(OnTimerEvent);//當(dāng)timer.Start()時(shí),觸發(fā)事件
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();
//創(chuàng)建一個(gè)線程,運(yùn)算,然后銷毀該線程 重復(fù)前面的動(dòng)作
Console.WriteLine("Create and destroy per count = " + count2.ToString());

// Create 10 threads and run them simultaneously
//一次性創(chuàng)建10個(gè)線程,然后遍歷使線程執(zhí)行運(yùn)算
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方法,按隊(duì)列執(zhí)行10個(gè)任務(wù)
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方法,按隊(duì)列執(zhí)行10個(gè)任務(wù)
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改進(jìn)后的線程池,利用QueueUserWorkItem方法,按隊(duì)列執(zhí)行10個(gè)任務(wù)
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進(jìn)行并行運(yùn)算
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技術(shù)關(guān)于C#線程,線程池和并行運(yùn)算的簡(jiǎn)單使用和對(duì)比,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩精品一区二区三区免费观看 | 久久机热| 国产精品久久久久久妇女 | 一a级片 | 玖玖综合网 | 午夜精品久久久 | 夜夜爽99久久国产综合精品女不卡 | 国产一区二区在线播放 | 国产精品美女久久久久久久网站 | 在线观看视频一区 | 在线激情视频 | 亚洲精品视频在线 | 福利精品| 国产成人免费一区二区60岁 | 亚洲精品二区 | 久久精品综合 | 精品美女在线观看视频在线观看 | 日韩影音 | 国产精品黄色 | 亚洲国产一区在线 | 亚洲一区二区电影网 | 国产欧美日韩一区二区三区 | 久久日韩精品 | 人人爽人人草 | 一区二区三区四区视频 | 欧美精品福利视频 | 中文字幕精品一区二区三区在线 | 国产伦一区二区三区四区 | 日韩爱爱网 | 九九在线精品视频 | 欧美精品一区二区三区一线天视频 | 自拍偷拍亚洲一区 | 九九亚洲 | 在线一区视频 | 国产精品国产成人国产三级 | 日本午夜在线视频 | 18gay男同69亚洲网站 | h片在线看 | 久久99视频 | 中文字幕在线观看av | 欧美综合网 |