麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

細說.NET中的多線程(一概念)

2019-11-14 13:52:39
字體:
來源:轉載
供稿:網友

 

為什么使用多線程

 

  1. 使用戶界面能夠隨時相應用戶輸入

當某個應用程序在進行大量運算時候,為了保證應用程序能夠隨時相應客戶的輸入,這個時候我們往往需要讓大量運算和相應用戶輸入這兩個行為在不同的線程中進行。

  1. 效率原因

應用程序經常需要等待一些資源,如等待網絡資源,等待io資源,等待用戶輸入等等。這種情況下使用多線程可以避免CPU長時間處于閑置狀態。

用戶態,內核態

線程內的資源有兩種運行態,即用戶態和內核態。某些運算可以在堆棧上進行,這種情況線程是在用戶態運行的,某些需要高權限運行的指令,或者某些優先級很高的指令需要在操作系統內核中進行,這個時候線程會運行在內核態。出于安全原因,用戶態和內核態的資源是不能夠互相訪問的,因此在用戶態和內核態的切換過程中,我們需要進行相關上下文以及變量的復制,這意味的用戶態和內核態的切換是以一定的時間消耗為代價的。

由于CPU是以時間片為單位進行線程的切換的,由于CPU的運算速度遠大于內存的讀寫速度,因此CPU和內存之間通常有兩級緩存,不同的線程的上下文訪問的數據往往是不同的,這樣線程的切換需要經常頻繁的切換CPU緩存的內容,也需要更新線程的調度信息,這些都是需要花費一定的時間的,因此合理的使用多線程,來避免CPU不停的進行上下文切換。

System.Thread介紹

創建一個線程

創建每一個線程的時候,CLR都需要進行一系列的操作,如初始化線程的本地資源,為線程分配用戶模式和內核模式下相應的堆棧,加載相應的托管,非托管資源等。

最簡單常用的創建線程的方式是使用ThreadStart來創建線程,相關代碼如下:

ThreadStart只需要一個委托即可,如果你善于使用匿名方法,也可以用匿名方法來代替委托,使用匿名方法的另一個好處是可以通過匿名方法的閉包特性來為新的線程傳遞參數。

雖然使用匿名方法的閉包特性可以很方便的為線程傳遞參數,但是也往往會帶來一些不容易發現的問題,如下面的程序,由于i變量的共享,在運行的時候輸出會有問題:

正確的寫法應該是這樣的:

線程異常的捕獲

如果線程中可能需要捕獲異常,那么我們不能這樣做:

而是這樣做:

System.Thread線程的成員

System.Threading.Thread幫助我們實現了一些線程的基本操作,如:

屬性名稱

說明

CurrentContext

獲取線程正在其中執行的當前上下文。

CurrentThread

獲取當前正在運行的線程。

ExecutionContext

獲取一個 ExecutionContext 對象,該對象包含有關當前線程的各種上下文的信息。

IsAlive

獲取一個值,該值指示當前線程的執行狀態。

IsBackground

獲取或設置一個值,該值指示某個線程是否為后臺線程。

IsThreadPoolThread

獲取一個值,該值指示線程是否屬于托管線程池。

ManagedThreadId

獲取當前托管線程的唯一標識符。

Name

獲取或設置線程的名稱。

PRiority

獲取或設置一個值,該值指示線程的調度優先級。

ThreadState

獲取一個值,該值包含當前線程的狀態。

 

 

方法名稱

說明

Abort()    

終止本線程。

GetDomain()

返回當前線程正在其中運行的當前域。

GetDomainId()

返回當前線程正在其中運行的當前域Id

Interrupt()

中斷處于 WaitSleepJoin 線程狀態的線程。

Join()

已重載。阻塞調用線程,直到某個線程終止時為止。

Resume()

繼續運行已掛起的線程。

Start()  

執行本線程。

Suspend()

掛起當前線程,如果當前線程已屬于掛起狀態則此不起作用

Sleep()  

把正在運行的線程掛起一段時間。

 

前臺線程vs后臺線程

這里我們單獨提一下前臺線程和后臺線程。在CLR中,線程分為前臺線程和后臺線程,當所有前臺的線程執行完之后,CLR會強制結束所有正在運行的后臺線程,并且不會出現任何異常。

因此你應該使用前臺線程來做一些必須完成的任務,比如把流從內存中寫到磁盤上。后臺線程可以做一些不那么重要的事情。一旦線程對象的生命周期開始,你就不能修改IsBackground值。

 

由于線程是非常昂貴的資源,我們經常需要控制允許多少線程同時運行,如何控制線程的生命周期,如何管理線程,這里我們引入了線程池的概念。

 

細說.NET中的多線程 (二 線程池)

 


作者:獨上高樓
出處:http://www.companysz.com/myprogram/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久亚洲精品 | 国产免费观看电影网站 | 国产在线欧美日韩 | 国产精品成人一区二区三区电影毛片 | 中文字幕观看 | 蜜桃传媒视频麻豆第一区免费观看 | 激情小说激情图片激情电影 | 精品国产成人 | 91九色网址 | 全黄毛片| 久久亚洲视频网 | 久草导航 | 国产成人精品一区二区仙踪林 | 婷婷久久影院 | 久在线观看福利视频69 | 国产精品爱久久久久久久 | 国产精品美女久久久久久网站 | 有色视频在线观看 | 成人毛片视频在线观看 | 黄色电影免费提供 | av免费在线不卡 | 成年人黄色免费电影 | 免费看一级视频 | wwwxxx视频| 国产资源在线免费观看 | 成人综合免费视频 | 久久久久久艹 | 成人三区四区 | 欧美性视频一区二区 | 色网站在线免费观看 | 一区二区三区欧美在线 | 55夜色66夜色国产精品视频 | 国内精品久久久久久久星辰影视 | 欧美人与性禽动交精品 | 在线日韩av电影 | 欧美一级精品 | 久久精品一二三区白丝高潮 | 久久国产乱子伦精品 | 日本中文高清 | asian附近女人裸体pics | 91美女啪啪|