先看一個模擬多個線程同時寫1000條日志例子:
class Program {
? static void Main(string[] args) {
? Thread t1 = new Thread(Working);
? t1.Name = "Thread1";// 實例化三個寫日志的線程。
? Thread t2 = new Thread(Working);
? t2.Name = "Thread2";
? Thread t3 = new Thread(Working);
? t3.Name = "Thread3";
? // 依次啟動3個線程。
? t1.Start();
? t2.Start();
? t3.Start();
? Console.ReadKey();
? }
? // 每個線程都同時在工作
? static void Working() {
? // 模擬1000次寫日志操作
? for (int i = 0; i < 1000; i++) {
? Logger.Write(Thread.CurrentThread.Name + " writes a log: " + i + ", on " + DateTime.Now.ToString() + ".\n");
? }// 做一些其它的事件
? for (int i = 0; i < 1000; i++) { }
? }
}
并發(fā):?
多個用戶爭奪同一個資源(這個資源可以是服務器上的日志,可以是執(zhí)行某一此sql操作,可以使ftp服務器上的某個文件等,又或者是程序中的某一個全局變量,因此我們可以稱這種資源為:全局資源);?
解釋:?
并發(fā)是在多個用戶請求同一個資源的時候,或者是程序本身多線程請求同一個資源的時候造成的。?
比如:?
一個財務系統(tǒng),兩個人同時對總錢數進行操作,一個加10塊一個減100塊,注意這兩個操作是同時進行的,那系統(tǒng)就不知道是加還是減了,這是并發(fā)問題?;蛘?,多個線程同時請求同一個資源,必然導致此資源的數據不安全,A線程修改了B線程的處理的數據,而B線程又修改了A線程處理的數理(線程安全)。
異步:?
A線程要請求某個資源,但是此資源正在被B線程使用中,因為沒有同步機制存在,A線程?
仍然請求的到這個資源,A線程無需等待。?
同步:?
A線程要請求某個資源,但是此資源正在被B線程使用中,因為同步機制存在,A線程請求?
不到,怎么辦,A線程只能等待下去。
同步與異步:?
顯然,同步最安全,最保險的。而異步不安全,容易導致死鎖,這樣一個線程死掉就會導致整個?
進程崩潰,但沒有同步機制的存在,性能會有所提升。所以對于同步與異步必須有所取舍。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現已開啟,新人活動云服務器買多久送多久。
新聞名稱:線程、線程池、并發(fā)、同步、異步、鎖-創(chuàng)新互聯(lián)
標題網址:http://www.ekvhdxd.cn/article44/dojiee.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、動態(tài)網站、移動網站建設、手機網站建設、靜態(tài)網站、虛擬主機
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容