中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

開發(fā)公司 網(wǎng)站建設(shè)價格南寧網(wǎng)絡(luò)推廣軟件

開發(fā)公司 網(wǎng)站建設(shè)價格,南寧網(wǎng)絡(luò)推廣軟件,wordpress自帶配置郵箱,企業(yè)推廣是做什么的一、線程池的作用 線程池是一種多線程處理形式,處理過程中將任務(wù)添加到隊列,然后在創(chuàng)建線程后自動啟動這些任務(wù)。線程池線程都是后臺線程。每個線程都使用默認堆棧大小,以默認的優(yōu)先級運行,并處于多線程單元中。如果某個線程在托管…

一、線程池的作用

? ? ? ? 線程池是一種多線程處理形式,處理過程中將任務(wù)添加到隊列,然后在創(chuàng)建線程后自動啟動這些任務(wù)。線程池線程都是后臺線程。每個線程都使用默認堆棧大小,以默認的優(yōu)先級運行,并處于多線程單元中。如果某個線程在托管代碼中空閑(如正在等待某個事件),則線程池將插入另一個輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間之后創(chuàng)建另一個輔助線程。但線程的數(shù)目永遠不會超過最大值。超過最大值的其他線程可以排隊,但它們要等到其他線程完成后才啟動。

線程池的使用范圍:?

(1)不需要前臺執(zhí)行的線程。

(2)不需要在使用線程具有特定的優(yōu)先級。

(3)線程的執(zhí)行時間不易過長,否則會使線程阻塞。由于線程池具有最大線程數(shù)限制,因此大量阻塞的線程池線程可能會阻止任務(wù)啟動。

(4)不需要將線程放入單線程單元。所有 ThreadPool 線程均不處于多線程單元中。

(5)不需要具有與線程關(guān)聯(lián)的穩(wěn)定標識,或使某一線程專用于某一任務(wù)。
?

二、常用方法介紹

1.ThreadPool.QueueUserWorkItem

? ? ? ? 該方法是線程池中最主要的方法,ThreadPool.QueueUserWorkItem 方法是用于將工作項提交到線程池隊列中的方法。當你需要執(zhí)行一個方法但不想創(chuàng)建一個新的線程時,可以使用該方法。這個方法會將工作項放到一個線程池隊列中,并由線程池中的一個線程來執(zhí)行該工作項。

 ThreadPool.QueueUserWorkItem(WaitCallback(DoWork), object)

該方法主要是兩個參數(shù),第一個是WaitCallback,第二個是一個object,object參數(shù)可以作為WaitCallback方法的參數(shù)傳入。

public delegate void WaitCallback(object state);

?WaitCallback是一個委托類型,委托參數(shù)類型是object定義,因此傳入WaitCallback的方法也應(yīng)當是object類型。

codepublic static void DoWork(object state)
{// 執(zhí)行一些操作,使用傳遞進來的狀態(tài)對象
}static void Main(string[] args)
{// 將 DoWork 方法添加到線程池中ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), someStateObject);
}

someStateObject是DoWork的參數(shù)進行傳入,然后開啟線程。

2.SetMinThreads和SetMaxThreads

SetMinThreads和SetMaxThreads是線程池中最小線程數(shù)和最大線程數(shù)?


// 參數(shù):// workerThreads:// 要由線程池根據(jù)需要創(chuàng)建的新的最小工作程序線程數(shù)。// completionPortThreads:// 要由線程池根據(jù)需要創(chuàng)建的新的最小空閑異步 I/O 線程數(shù)。// 返回結(jié)果:如果更改成功,則為 true;否則為 false。[SecuritySafeCritical]public static bool SetMinThreads(int workerThreads, int completionPortThreads);// 參數(shù):// workerThreads:// 線程池中輔助線程的最大數(shù)目。// completionPortThreads:// 線程池中異步 I/O 線程的最大數(shù)目。// 返回結(jié)果:如果更改成功,則為 true;否則為 false。[SecuritySafeCritical]public static bool SetMaxThreads(int workerThreads, int completionPortThreads)例如:ThreadPool.SetMinThreads(1,1);ThreadPool.SetMaxThreads(5, 5);

3.ManualResetEvent用法

1.ManualResetEvent 調(diào)用一次Set()后將允許恢復(fù)所有被阻塞線程。需手動在調(diào)用WaitOne()之后調(diào)用Reset()重置信號量狀態(tài)為非終止,然后再次調(diào)用WaitOne()的時候才能繼續(xù)阻塞線程,反之則不阻塞

2.AutoResetEvent,調(diào)用一次Set()只能繼續(xù)被阻塞的一個線程,多次調(diào)用Set()才行,但不需手動調(diào)用Reset();再次調(diào)用WaitOne()的時候又能阻塞線程,也是和前者的區(qū)別

3.兩者單個實例均可阻塞一個或多個線程,在多個線程中調(diào)用 主線程 創(chuàng)建的 兩者單個實例.WaitOne(),前提是兩者實例必須是非終止狀態(tài)

4.兩者實例化構(gòu)造參數(shù)解釋

public AutoResetEvent(bool initialState);

true:設(shè)置終止狀態(tài)。相當于調(diào)用了Set(),即首次不會被WaitOne()阻塞,下次執(zhí)行WaitOne()才會被阻塞

false:設(shè)置非終止狀態(tài)。遇到WaitOne()立即阻塞所在的一個或多個線程

具體參考一下文章:

C#學習(二十八)——ManualResetEvent的理解和使用-CSDN博客

三、ThreadPool代碼

代碼1:關(guān)于ManualResetEvent用法

using System;
using System.Threading;public class Example
{// mre is used to block and release threads manually. It is// created in the unsignaled state.private static ManualResetEvent mre = new ManualResetEvent(false);static void Main(){Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");//中文注釋1:開啟三個線程,每個線程開啟后調(diào)用WaitOne()阻塞。for(int i = 0; i <= 2; i++){Thread t = new Thread(ThreadProc);t.Name = "Thread_" + i;t.Start();}Thread.Sleep(500);Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +"\nto release all the threads.\n");Console.ReadLine();//中文注釋2:只有當Set()后才會執(zhí)行WaitOne()后的代碼mre.Set();Thread.Sleep(500);Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +"\ndo not block. Press Enter to show this.\n");Console.ReadLine();//中文注釋3:繼續(xù)再開兩個線程,仍然調(diào)用WaitOne(),但是不會阻塞,會繼續(xù)執(zhí)行for(int i = 3; i <= 4; i++){Thread t = new Thread(ThreadProc);t.Name = "Thread_" + i;t.Start();}Thread.Sleep(500);Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +"\nwhen they call WaitOne().\n");Console.ReadLine();//中文注釋4:只有Reset()后,下面再開線程就會繼續(xù)被阻塞mre.Reset();// Start a thread that waits on the ManualResetEvent.Thread t5 = new Thread(ThreadProc);t5.Name = "Thread_5";t5.Start();Thread.Sleep(500);Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");Console.ReadLine();//中文注釋5:再次Set(),就可以了mre.Set();// If you run this example in Visual Studio, uncomment the following line://Console.ReadLine();}private static void ThreadProc(){string name = Thread.CurrentThread.Name;Console.WriteLine(name + " starts and calls mre.WaitOne()");mre.WaitOne();Console.WriteLine(name + " ends.");}
}/* This example produces output similar to the following:Start 3 named threads that block on a ManualResetEvent:Thread_0 starts and calls mre.WaitOne()
Thread_1 starts and calls mre.WaitOne()
Thread_2 starts and calls mre.WaitOne()When all three threads have started, press Enter to call Set()
to release all the threads.Thread_2 ends.
Thread_0 ends.
Thread_1 ends.When a ManualResetEvent is signaled, threads that call WaitOne()
do not block. Press Enter to show this.Thread_3 starts and calls mre.WaitOne()
Thread_3 ends.
Thread_4 starts and calls mre.WaitOne()
Thread_4 ends.Press Enter to call Reset(), so that threads once again block
when they call WaitOne().Thread_5 starts and calls mre.WaitOne()Press Enter to call Set() and conclude the demo.Thread_5 ends.

代碼2:


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static void Main(string[] args){const int times = 10;  //開線程數(shù)ManualResetEvent[] mre = new ManualResetEvent[times];   //1、定義開線程數(shù)Random random = new Random();   //隨機數(shù)Console.WriteLine("開始 {0} 任務(wù)", times);for (int i = 0; i < times; i++)   //2、循環(huán)這10個線程{mre[i] = new ManualResetEvent(false);  //3、初始化每個線程:設(shè)置false表示無信號,將使WaitOne阻塞也就是線程等待count c = new count(random.Next(1, 1000), mre[i]);   //借助類傳參ThreadPool.QueueUserWorkItem(c.ThreadPoolCallback, i);   //4、為每個線程安排任務(wù)}WaitHandle.WaitAll(mre);    //6、讓主線程等待所有線程完成(池中線程數(shù)不能多于64個)Console.WriteLine("所有線程完成!");Console.Read();}}class count{private int ramNum;   //存放隨機數(shù)private ManualResetEvent threadSta;   //線程狀態(tài)private int total;    //存放線程計算結(jié)果/// <summary>/// 傳遞數(shù)據(jù)/// </summary>/// <param name="ramnum">保存隨機數(shù)</param>/// <param name="mre">線程狀態(tài)</param>public count(int ramnum, ManualResetEvent mre){ramNum = ramnum;threadSta = mre;}/// <summary>/// 線程/// </summary>/// <param name="threadParam"></param>public void ThreadPoolCallback(Object threadParam){int threadIndex = (int)threadParam;Console.WriteLine("線程 {0} 啟動", threadIndex);total = docount(ramNum);Console.WriteLine("線程執(zhí)行結(jié)果: {0}", total);threadSta.Set();  //5、設(shè)置每個線程為有信號狀態(tài):通知WaitOne不再阻塞}/// <summary>/// 從0開始加到傳過來數(shù)/// </summary>/// <param name="ramNum">傳過來的數(shù):產(chǎn)生的隨機數(shù)</param>/// <returns>返回相加的結(jié)果</returns>public int docount(int ramNum){int sum = 0;for (int i = 0; i <= ramNum; i++){sum += i;}return sum;}}
}

參考文獻:

C#中的線程池使用方法_c# 線程池-CSDN博客

C#多線程--線程池(ThreadPool)_c# 主線程和 線程池-CSDN博客

C#知識點講解之ManualResetEvent類的使用-CSDN博客

C#線程池實例(多參)_c# 線程池多參數(shù)-CSDN博客

C#多線程和線程池_c#線程池和線程的區(qū)別-CSDN博客

http://m.risenshineclean.com/news/65748.html

相關(guān)文章:

  • 企業(yè)建設(shè)網(wǎng)站的策劃流程客戶營銷
  • 貴州網(wǎng)站開發(fā)公司seo推廣優(yōu)勢
  • 鄉(xiāng)鎮(zhèn)政府網(wǎng)站建設(shè)情況哪個公司要做網(wǎng)絡(luò)推廣
  • 可以做網(wǎng)站素材的服裝點擊進入官方網(wǎng)站
  • 查看網(wǎng)站隱藏關(guān)鍵詞seo診斷方法步驟
  • 怎么用視頻做網(wǎng)站登錄的背景網(wǎng)站搜索排名查詢
  • 集團門戶網(wǎng)站建設(shè)策劃營業(yè)推廣是一種什么樣的促銷方式
  • 北京朝陽網(wǎng)站建設(shè)seo課堂
  • 做百度推廣和企業(yè)網(wǎng)站那個有效果嗎廣州網(wǎng)站制作實力樂云seo
  • 網(wǎng)站動態(tài)加速百度 官網(wǎng)
  • 1萬元左右的加盟店東莞seo網(wǎng)站管理
  • 做電影網(wǎng)站免責聲明有用嗎搜狗網(wǎng)站排名軟件
  • 杭州做網(wǎng)站的集團電商運營去哪里學比較好
  • 虛擬主機做多個網(wǎng)站四川seo優(yōu)化
  • 做費網(wǎng)站武漢網(wǎng)站快速排名提升
  • 重慶seo優(yōu)化杭州百度快照優(yōu)化公司
  • 怎么做一個國外網(wǎng)站網(wǎng)絡(luò)營銷好找工作嗎
  • 長沙專業(yè)建設(shè)網(wǎng)站企業(yè)百度不收錄網(wǎng)站怎么辦
  • 設(shè)計網(wǎng)站包含的功能模塊優(yōu)化營商環(huán)境存在問題及整改措施
  • 廈門方易網(wǎng)站制作有限公司seo站長平臺
  • 服裝效果圖網(wǎng)站國際新聞快報
  • 佛山專業(yè)網(wǎng)站建設(shè)哪家好發(fā)外鏈的平臺有哪些
  • 如何做百度推廣的網(wǎng)站寫文章免費的軟件
  • 做玩網(wǎng)站怎么上傳西安網(wǎng)站seo廠家
  • 廣東省建設(shè)廳網(wǎng)站優(yōu)化師培訓機構(gòu)
  • 網(wǎng)站建設(shè)營銷詞可以免費領(lǐng)取會員的軟件
  • 高縣住房和城鄉(xiāng)建設(shè)部網(wǎng)站百度文庫官網(wǎng)
  • 做網(wǎng)站的服務(wù)器百度網(wǎng)盤app下載安裝 官方下載
  • 保定市住房保障和城鄉(xiāng)建設(shè)局網(wǎng)站四川網(wǎng)站seo
  • 找券網(wǎng)站怎么做搜索引擎營銷的簡稱