搜尋
首頁後端開發C#.Net教程C#的多線程機制初探(1)

C#的多線程機制初探(1)

Dec 21, 2016 pm 02:58 PM

一.多執行緒的概念

Windows是一個多任務的系統,如果你使用的是windows 2000及其以上版本,你可以透過工作管理員查看目前系統運行的程式和進程。什麼是進程呢?當一個程式開始運行時,它就是一個進程,進程所指包括運行中的程式和程式所使用的記憶體和系統資源。而一個行程又是由多個執行緒所組成的,執行緒是程式中的一個執行流,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但程式碼區是共享的,即不同的線程可以執行同樣的函數。多執行緒是指程式中包含多個執行流,即在一個程式中可以同時執行多個不同的執行緒來執行不同的任務,也就是說允許單一程式建立多個並行執行的執行緒來完成各自的任務。瀏覽器就是一個很好的多線程的例子,在瀏覽器中你可以在下載java小應用程式或圖象的同時滾動頁面,在訪問新頁面時,播放動畫和聲音,打印文件等。

多執行緒的好處在於可以提高CPU的利用率-任何一個程式設計師都不希望自己的程式很多時候沒事可幹,在多執行緒程式中,一個執行緒必須等待的時候,CPU可以運行其它的線程而不是等待,這樣就大大提高了程式的效率。

然而我們也必須認識到線程本身可能影響系統性能的不利方面,以正確使用線程:

線程也是程序,所以線程需要佔用內存,線程越多佔用內存也越多 
多線程需要協調和管理,所以需要CPU時間追蹤線程 
線程之間對共享資源的存取會相互影響,必須解決競用共享資源的問題 
線程太多會導致控制太複雜,最終可能造成很多Bug

基於以上認識,我們可以一個比喻來加深理解。假設有一個公司,公司裡有很多各司其職的職員,那麼我們可以認為這個正常運作的公司就是一個進程,而公司裡的職員就是線程。一個公司至少得有一個職員吧,同理,一個行程至少包含一個執行緒。在公司裡,你可以一個職員幹所有的事,但是效率很顯然是高不起來的,一個人的公司也不可能做大;一個程序中也可以只用一個線程去做事,事實上,一些過時的語言如fortune,basic都是如此,但是像一個人的公司一樣,效率很低,如果做大程序,效率更低——事實上現在幾乎沒有單線程的商業軟體。公司的職員越多,老闆就得發越多的薪水給他們,還得耗費大量精力去管理他們,協調他們之間的矛盾和利益;程序也是如此,線程越多耗費的資源也越多,需要CPU時間去追蹤線程,還得解決諸如死鎖,同步等問題。總之,如果你不想你的公司被稱為“皮包公司”,你就得多幾個員工;如果你不想讓你的程序顯得稚氣,就在你的程序裡引入多線程吧!

本文將對C#程式設計中的多執行緒機制進行探討,透過一些實例解決對執行緒的控制,多執行緒間通訊等問題。為了省去創建GUI那些繁瑣的步驟,更清晰地逼近線程的本質,下面所有的程序都是控制台程序,程序最後的Console.ReadLine()是為了使程序中途停下來,以便看清楚執行過程中的輸出。

好了,廢話少說,讓我們來體驗一下多線程的C#吧!

二.操縱一個線程

任何程式在執行時,至少有一個主線程,下面這段小程式可以給讀者一個直覺的印象:

[CODE] 
//SystemThread.cs 
[CODE] 
//SystemThread.cs 

. ; 

using System.Threading;

namespace ThreadTest 

  class RunIt 
  { 
  〠🀀 
    { 
      Thread.CurrentThread.Name="System Thread";//給當前執行緒命名為"System Thread" 
Console.WriteLine(Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread.ThreadState); 
 〔  } 

[/CODE]

編譯執行後你看到了什麼?是的,程式將產生以下輸出:

System Thread's Status:Running

在這裡,我們透過Thread類別的靜態屬性CurrentThread取得了目前執行的線程,對其Name屬性賦值“System Thread”,最後也輸出了它的當前狀態(ThreadState)。所謂靜態屬性,就是這個類別所有物件所公有的屬性,不管你創建了多少個這個類別的實例,但是類別的靜態屬性在記憶體中只有一個。很容易理解CurrentThread為什麼是靜態的-雖然有多個執行緒同時存在,但在某一個時刻,CPU只能執行其中一個。

就像上面程式所示範的,我們透過Thread類別來建立和控制執行緒。注意到程式的頭部,我們使用瞭如下命名空間: 
[CODE] 
using System; 
using System.Threading;

[/CODE] 
與多執行緒機制應用相關的類別都是放在System.Threading命名空間中的。其中提供Thread類別用於建立線程,ThreadPool類別用於管理線程池等等,此外還提供解決了線程執行安排,死鎖,線程間通訊等實際問題的機制。如果你想在你的應用程式中使用多線程,就必須包含這個類別。 Thread類別有幾個至關重要的方法,說明如下:

Start():啟動執行緒 
Sleep(int):靜態方法,暫停目前執行緒指定的毫秒數 
Abort():通常使用該方法來終止一個線程 
Suspend():該方法並未終止未完成的線程,它只是掛起線程,以後還可恢復。 
Resume():恢復被Suspend()方法掛起的線程的執行

 以上就是C#的多線程機制初探(1)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
c#.net適合您嗎?評估其適用性c#.net適合您嗎?評估其適用性Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程.NET中的C#代碼:探索編程過程Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#.NET:探索核心概念和編程基礎知識C#.NET:探索核心概念和編程基礎知識Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

測試C#.NET應用程序:單元,集成和端到端測試測試C#.NET應用程序:單元,集成和端到端測試Apr 09, 2025 am 12:04 AM

C#.NET應用的測試策略包括單元測試、集成測試和端到端測試。 1.單元測試確保代碼的最小單元獨立工作,使用MSTest、NUnit或xUnit框架。 2.集成測試驗證多個單元組合的功能,常用模擬數據和外部服務。 3.端到端測試模擬用戶完整操作流程,通常使用Selenium進行自動化測試。

高級C#.NET教程:ACE您的下一次高級開發人員面試高級C#.NET教程:ACE您的下一次高級開發人員面試Apr 08, 2025 am 12:06 AM

C#高級開發者面試需要掌握異步編程、LINQ、.NET框架內部工作原理等核心知識。 1.異步編程通過async和await簡化操作,提升應用響應性。 2.LINQ以SQL風格操作數據,需注意性能。 3..NET框架的CLR管理內存,垃圾回收需謹慎使用。

C#.NET面試問題和答案:提高您的專業知識C#.NET面試問題和答案:提高您的專業知識Apr 07, 2025 am 12:01 AM

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。

使用C#.NET建築微服務:建築師實用指南使用C#.NET建築微服務:建築師實用指南Apr 06, 2025 am 12:08 AM

C#.NET是構建微服務的熱門選擇,因為其生態系統強大且支持豐富。 1)使用ASP.NETCore創建RESTfulAPI,處理訂單創建和查詢。 2)利用gRPC實現微服務間的高效通信,定義和實現訂單服務。 3)通過Docker容器化微服務,簡化部署和管理。

C#.NET安全性最佳實踐:防止常見漏洞C#.NET安全性最佳實踐:防止常見漏洞Apr 05, 2025 am 12:01 AM

C#和.NET的安全最佳實踐包括輸入驗證、輸出編碼、異常處理、以及身份驗證和授權。 1)使用正則表達式或內置方法驗證輸入,防止惡意數據進入系統。 2)輸出編碼防止XSS攻擊,使用HttpUtility.HtmlEncode方法。 3)異常處理避免信息洩露,記錄錯誤但不返回詳細信息給用戶。 4)使用ASP.NETIdentity和Claims-based授權保護應用免受未授權訪問。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),