關於並行 併發與多執行緒的一點理解

2022-05-05 23:33:18 字數 730 閱讀 3695

同步:就是**是完完全全按順序跑的。假如你的一段**中,呼叫了乙個函式,如readfile,它要花費5秒鐘才返回,那麼你的**就得在這個地方等待五秒。知道它完成了你才能繼續往下走。

非同步:就是**在巨集觀上是按順序跑的,微觀上其實不是。仍然看readfile這個例子,用非同步方式實現的話,雖然這個函式造成的結果要花費5秒,但是在1秒內就返回了,它所做的就是提供乙個位址給系統,然後返回,你就可以接著做你自己的事(這裡接著要做的事暫時不與readfile實際讀取的資料無關),由於現在大多數系統都是多工的,那麼系統在給你的這部分**的時間片用完後就會主動去呼叫你剛才提供的那個位址中的**。你在後續的處理中就會用一直方式去判斷那部分**執行完了沒有,一旦發現執行完了,你就可以對這部分資料進行處理了。

並行:不管在巨集觀上和微觀上,我們都認為兩件事情是同時在做的,那麼很顯然,這兩件事情肯定不存在優先順序(即誰必須先完成才能做另外一件),也不存在需要對某個東西進行同步的問題。(這裡說的同步和上面解釋的同步有一定的區別,上面說的同步偏向於程式的執行方式,而這裡偏向於指某一部分資料不能同時被多個程式訪問)。

併發:在巨集觀上是兩件事情同時在做,而在內部實際上是輪流執行的。那麼這裡就分兩種情況,一種是這兩件事沒什麼實質性的聯絡,你做你的事,我做我的事。另一種就是,你的先完成一點,交給我了我才能開始做,然後你就可以繼續做,我也在做。這兩種情況最終形成的巨集觀效果就是兩件事情都在做。

多執行緒:這裡不說多執行緒的概念了,之所以加上它,是因為我把多執行緒和併發、並行給弄混淆了。多執行緒是併發實現的方式之一。

關於多執行緒的一點總結

昨天又在toplanguage上看到一些關於輕量級執行緒的討論,於是對其中很有用的一段話轉過來 記錄下來以供自己日後慢慢研究。下面是由red.gmail.com發表在toplanguage上的 1.process per connection thread per connection 這在連線數不...

關於多執行緒的一點感想

寫了這麼多年多執行緒程式,多執行緒到底是用來幹嘛的,可能這是個很白痴的問題,就我的親身經歷看開主要是因為一下兩點 1.提公升程式效率 2.使得程式可以非同步執行,乙個執行緒幹這個活,另乙個執行緒幹另乙個活 嚴格來說,感覺這還是為了提公升程式效率,因為cpu本身就是在不同執行緒之間切換的,兩個執行緒能...

關於多執行緒的一點補充

多執行緒與工作流一文中將多執行緒設計思路與工作流設計思路進行了一下對比,突然想到了這個問題,就順手發上來了 在開發wf的宿主程式中,我們或多或少的會用到多執行緒,如果宿主是winform程式,也有可能會用到跨執行緒訪問ui控制項的需要 看一下在net1.1中的執行緒訪問ui控制項 private v...