同步與非同步多執行緒的區別

2021-09-24 09:35:35 字數 2067 閱讀 1533

先需要講解一下計算機的基本概念:

程序:乙個程式在作業系統上執行時,占用作業系統的資源,起名叫程序。

執行緒:執行緒是程式執行的最小單位,程序在執行任何乙個操作或者響應,都是由執行緒完成的,執行過程中,使用到作業系統的資源合集,就叫執行緒,程序可以包含多個執行緒或者單單乙個主線程(也稱作ui執行緒),執行緒一定屬於程序。

多執行緒:在作業系統裡,乙個程序裡面有多個執行流併發執行。在c#裡thread是.net封裝的乙個類,來對應上作業系統上的多執行緒。

using system;

using system.threading;

//同步方式

private void synccal()

", thread.currentthread.managedthreadid);

for (int i = 0; i < 5; ++i)

_", "synccal", i);

this.dosomething(name);

}console.writeline("同步計算方法結束,當前執行緒的id是", thread.currentthread.managedthreadid);

watch.stop(); //停止監視

timespan timespan = watch.elapsed; //獲取當前例項測量得出的總時間

}//非同步方式

private void asynccal()

", thread.currentthread.managedthreadid);

actionfunc = this.dosomething;

"asynccal");//同步呼叫

for (int i = 0; i < 5; ++i)

_", "asynccal", i);

func.begininvoke("asynccal", null, null);//非同步呼叫

}console.writeline("非同步計算方法結束,當前執行緒的id是", thread.currentthread.managedthreadid);

}public void dosomething(string name)

當前執行緒的id=當前的時間=", name,

thread.currentthread.managedthreadid.tostring("00"), datetime.now.tostring("hhmmss:fff"));

long lresult = 0;

for (int i = 0; i < 1000000000; i++)

lresult += i;

console.writeline("當前操作=當前執行緒的id=當前的時間=計算出來的值=", name,

thread.currentthread.managedthreadid.tostring("00"),

datetime.now.tostring("hhmmss:fff"),lresult);

//停止監視

//timespan timespan = watch.elapsed; //獲取當前例項測量得出的總時間}}

從以上**段可以發現同步發起呼叫時,必須等著完成之後,才能進入到下一行**段。非同步發起呼叫,不用等待完成,直接進入下一行**段,原來的操作也會有新的操作流去完成。但是從執行結果也可以發現一些特點:

第一點就是正常來說開啟5個執行緒執行速度應該是同步執行的5倍,應該是接近線性的,其實不然可以看到電腦只開啟了4個執行緒(和cpu的核心數有關),最快結束的執行緒再去做第五項工作,也就是說這個執行緒id是6的執行緒它做了2次計算,而且執行緒6結束到下次開啟執行緒6做第5次計算的時候也有間隔,這樣說明影響速度的原因是資源有限和執行緒排程花費導致不可能是線性倍數的,當開啟多執行緒的時候可以在任務管理器發現cpu占用突然變的很高。

第三點非同步多執行緒的無序性,啟動時候無序沒有阻塞的,同一時間申請執行緒,作業系統是無法掌控的,執行時間不確定,因為cpu的排程是作業系統完成的(執行緒優先順序也只是影響分配策略),結束也是無序的,先啟動的不一定先結束,所以多執行緒很難控制。

同步 非同步 多執行緒

1 首先明確一點,對於單核cpu,任意乙個時刻只有乙個執行緒在執行。那麼既然這樣,多執行緒還有什麼意義呢?舉例來說,現在只有乙個人,要做好幾個任務。單執行緒就是,任務乙個乙個地做,必須做完乙個任務後,再去做另乙個任務。多執行緒就是一會做這個任務,一會做那個任務,每個任務做一會,不停的切換。顯然,最後...

同步 非同步 多執行緒

1 首先明確一點,對於單核cpu,任意乙個時刻只有乙個執行緒在執行。那麼既然這樣,多執行緒還有什麼意義呢?舉例來說,現在只有乙個人,要做好幾個任務。單執行緒就是,任務乙個乙個地做,必須做完乙個任務後,再去做另乙個任務。多執行緒就是一會做這個任務,一會做那個任務,每個任務做一會,不停的切換。顯然,最後...

多執行緒 執行緒同步 非同步

同步和非同步 同步和非同步通常用來形容一次方法的呼叫。同步方法呼叫一旦開始,呼叫者必須完成所有的操作一直到方法呼叫結束,其他呼叫者才能繼續後續的行為,非同步方法呼叫類似乙個訊息傳遞,一旦開始,方法呼叫就會立即返回,其他呼叫者則可以無需等待,可以立即繼續後續的操作。非同步 不過,如果 我們 趕時髦,就...