下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、多線程開放分類: 程序、API線程?英文:Thread每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。多線程?多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。使用線程的好處有以下幾點(diǎn):使用線程可以把占據(jù)長時(shí)間的程序中的任務(wù)放到去處理用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了
2、一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度程序的運(yùn)行速度可能加快在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下可以一些珍貴的資源如內(nèi)存占用等等。還有其他很多使用多線程的好處,這里就不一一說明了。一些線程模型的背景可以重點(diǎn)一下在Win32 環(huán)境中常用的一些模型。單線程模型在這種線程模型中,一個(gè)進(jìn)程中只能有一個(gè)線程,剩下的進(jìn)程必須等待當(dāng)前的線程執(zhí)行完。這種模型的缺點(diǎn)在于系統(tǒng)完成一個(gè)很小的任務(wù)都必須占用很長的時(shí)間。塊線程模型(單線程多塊模型STA)這種模型里,一個(gè)程序里可能會(huì)包含多個(gè)執(zhí)行的線程。在這里,每個(gè)線程被分為進(jìn)程里一個(gè)單獨(dú)的塊
3、。每個(gè)進(jìn)程可以含有多個(gè)塊,可以共享多個(gè)塊中的數(shù)據(jù)。程序規(guī)定了每個(gè)塊中線程的執(zhí)行時(shí)間。所有的請求通過Windows 消息隊(duì)列進(jìn)行串行化,這樣保證了每個(gè)時(shí)刻只能一個(gè)塊,因而只有一個(gè)單獨(dú)的進(jìn)程可以在某一個(gè)時(shí)刻得到執(zhí)行。這種模型比單線程模型的好處在于,可以響應(yīng)同一時(shí)刻的多個(gè)用戶請求的任務(wù)而不只是單個(gè)用戶請求。但它的性能還不是很好,因?yàn)樗褂昧舜谢木€程模型,任務(wù)是一個(gè)接一個(gè)得到執(zhí)行的。多線程塊模型(線程塊模型)多線程塊模型(MTA)在每個(gè)進(jìn)程里只有一個(gè)塊而不是多個(gè)塊。這單個(gè)塊控制著多個(gè)線程而不是單個(gè)線程。這里不需要消息隊(duì)列,因?yàn)樗械木€程都是相同的塊的一個(gè)部分,并且可以共享。這樣的程序比單線程模型和
4、STA 的執(zhí)行速度都要塊,因?yàn)榻档土讼到y(tǒng)的負(fù)載,因而可以優(yōu)化來減少系統(tǒng) idle 的時(shí)間。這些應(yīng)用程序一般比較復(fù)雜,因?yàn)槌绦騿T必須提供線程同步以保證線程不會(huì)并發(fā)的請求相同的資源,因而導(dǎo)致競爭情況的發(fā)生。這里有必要提供一個(gè)鎖機(jī)制。但是這樣也許會(huì)導(dǎo)致系統(tǒng)死鎖的發(fā)生。多線程在.NET 里如何工作?在本質(zhì)上和結(jié)構(gòu)來說,.NET 是一個(gè)多線程的環(huán)境。有兩種主要的多線程方法是.NET 所提倡的:使用ThreadStart 來開始你自己的進(jìn)程,直接的(使用 ThreStream.BeginRead,或者調(diào)用BeginInvoke)使用 Threool.QueueUserWorkItem)或者間接的(比如oo
5、l 類。一般來說,你可以手動(dòng)為長時(shí)間運(yùn)行的任務(wù)創(chuàng)建一個(gè)新的線程,另外對(duì)于短時(shí)間運(yùn)行的任務(wù)尤其是經(jīng)常需要開始的那些,進(jìn)程池是一個(gè)非常好的選擇。進(jìn)程池可以同時(shí)運(yùn)行多個(gè)任務(wù),還可以使用框架類。對(duì)于資源緊缺需要進(jìn)行同步的情況來說,它可以限制某一時(shí)刻只允許一個(gè)線程資源。這種情況可以視為給線程實(shí)現(xiàn)了鎖機(jī)制。線程的基類是System.Threading。所有線程通過 CLI 來進(jìn)行管理。創(chuàng)建線程:創(chuàng)建一個(gè)新的Thread 對(duì)象的實(shí)例。Thread 的構(gòu)造函數(shù)接受一個(gè)參數(shù):Thread DummyThread = new Thread( new ThreadStart(dummyFunction) );執(zhí)行線
6、程:使用Threading 命名空間里的start 方法來運(yùn)行線程:DummyThread.Start ();組合線程:經(jīng)常會(huì)出現(xiàn)需要組合多個(gè)線程的情況,就是當(dāng)某個(gè)線程需要其他線程的結(jié)束來完成自己的任務(wù)。假設(shè)DummyThread 必須等待DummyPriorityThread 來完成自己的任務(wù),只需要這樣做:DummyPriorityThread.Join() ;暫停線程:使得線程暫停給定的秒DummyPriorityThread.Sleep();中止線程:如果需要中止線程可以使用如下的代碼:DummyPriorityThread.Abort();同步經(jīng)常我們會(huì)遇到需要在線程間進(jìn)行同步的情況
7、,下面的代碼給出了一些方法:using System;using System.Threading;namespace SynchronizationThreadsExample class SynchronizationThreadsExampleprivate int counter = 0; static void Main( ) SynchronizationThreadsExample STE = new SynchronizationThreadsExample(); STE.ThreadFunction( );public void ThreadFunction ( ) Thre
8、ad DummyThread = new Thread( new ThreadStart(SomeFunction) ; DummyThread.IsBackground=true;DummyThread.Name = First Thread; DummyThread.Start( );Console.WriteLine(Started thread , DummyThread.Name);Thread DummyPriorityThread = new Thread( new ThreadStart(SomeFunction) ); DummyPriorityThread.IsBackgr
9、ound=true;DummyPriorityThread.Name = Second Thread; DummyPriorityThread.Start( );Console.WriteLine(Started thread , DummyPriorityThread.Name); DummyThread.Join( );DummyPriorityThread.Join( );public void SomeFunction( ) try while (counter 10) int tempCounter = counter; tempCounter +; Thread.Sleep(1);
10、counter = tempCounter;Console.WriteLine( Thread . SomeFunction: ,Thread.CurrentThread.Name, counter);catch (ThreadInterruptedException Ex) Console.WriteLine( Exception in thread , Thread.CurrentThread.Name);finally Console.WriteLine( Thread Exiting. ,Thread.CurrentThread.Name);使用InterlockC#提供了一個(gè)特殊的類叫做 interlocked,就是提供了鎖機(jī)制的實(shí)現(xiàn),我們可以加入如下的代碼實(shí)現(xiàn)鎖機(jī)制:Interlocked.SomeFunction (ref counter);使用鎖這是為了鎖定代碼關(guān)鍵區(qū)域以進(jìn)行同步,鎖定代碼如下:lock (this) Some statements ;使用Monitor當(dāng)有需要進(jìn)行線程管理的時(shí)候我們可以使用:Monitor.Enter(this);其他也有一些方法進(jìn)行管理,這里就不一一提及了。線程的缺點(diǎn)線程自然也有缺點(diǎn),以下列出了一些:如果有大量的線程,會(huì)影響性能,因?yàn)椴僮飨到y(tǒng)需要在他們之間切換;更多的線程需要更多的內(nèi)存空間線程會(huì)給程序帶來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年養(yǎng)老院入住全方位養(yǎng)生護(hù)理服務(wù)協(xié)議3篇
- 個(gè)人與企業(yè)房屋裝修合同(2024版)
- 2025年度科技成果轉(zhuǎn)化與綠色低碳發(fā)展合同4篇
- 二零二四年度新興產(chǎn)業(yè)信托資金借條合同3篇
- 2025年水資源保護(hù)項(xiàng)目水費(fèi)承包與監(jiān)測合同3篇
- 2025年度大學(xué)生創(chuàng)業(yè)孵化基地入駐入駐者項(xiàng)目退出機(jī)制與后續(xù)服務(wù)協(xié)議4篇
- 二零二五年度虛擬現(xiàn)實(shí)游戲引擎許可使用合同3篇
- 2025年度房地產(chǎn)存貨質(zhì)押貸款合作方案4篇
- 二零二五年度石材行業(yè)供應(yīng)鏈整合服務(wù)采購合同4篇
- 二零二五年度出租車行業(yè)車輛維護(hù)司機(jī)合同
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- 垃圾車駕駛員聘用合同
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個(gè)人合同模板
- 八年級(jí)語文下冊 成語故事 第十五課 諱疾忌醫(yī) 第六課時(shí) 口語交際教案 新教版(漢語)
- 2024年1月高考適應(yīng)性測試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- EPC項(xiàng)目采購階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 四川2024年專業(yè)技術(shù)人員公需科目“數(shù)字經(jīng)濟(jì)與驅(qū)動(dòng)發(fā)展”參考答案(通用版)
- 煤炭裝卸服務(wù)合同
- 廣東省佛山市順德區(qū)2023學(xué)年中考一模物理試題(含答案解析)
評(píng)論
0/150
提交評(píng)論