ZT 非同步呼叫與多執行緒的區別

2022-03-05 19:16:22 字數 2137 閱讀 3394

多執行緒和非同步操作的異同

多執行緒和非同步操作兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為多執行緒和非同步操作是等同的概念。但是,多執行緒和非同步操作還是有一些區別的。而這些區別造成了使用多執行緒和非同步操作的時機的區別。

非同步操作的本質

所有的程式最終都會由計算機硬體來執行,所以為了更好的理解非同步操作的本質,我們有必要了解一下它的硬體基礎。 熟悉電腦硬體的朋友肯定對dma這個詞不陌生,硬碟、光碟機的技術規格中都有明確dma的模式指標,其實網絡卡、音效卡、顯示卡也是有dma功能的。dma就是直 接記憶體訪問的意思,也就是說,擁有dma功能的硬體在和記憶體進行資料交換的時候可以不消耗cpu資源。只要cpu在發起資料傳輸時傳送乙個指令,硬體就開 始自己和記憶體交換資料,在傳輸完成之後硬體會觸發乙個中斷來通知操作完成。這些無須消耗cpu時間的i/o操作正是非同步操作的硬體基礎。所以即使在dos 這樣的單程序(而且無線程概念)系統中也同樣可以發起非同步的dma操作。

執行緒的本質

執行緒不是乙個計算機硬體的功能,而是作業系統提供的一種邏輯功能,執行緒本質上是程序中一段併發執行的**,所以執行緒需要作業系統投入cpu資源來執行和排程。

非同步操作的優缺點

因為非同步操作無須額外的執行緒負擔,並且使用**的方式進行處理,在設計良好的情況下,處理函式可以不必使用共享變數(即使無法完全不用,最起碼可以減少 共享變數的數量),減少了死鎖的可能。當然非同步操作也並非完美無暇。編寫非同步操作的複雜程度較高,程式主要使用**方式進行處理,與普通人的思維方式有些 初入,而且難以除錯。

多執行緒的優缺點

多執行緒的優點很明顯,執行緒中的處理程式依然是順序執行,符合普通人的思維習慣,所以程式設計簡單。但是多執行緒的缺點也同樣明顯,執行緒的使用(濫用)會給系統帶來上下文切換的額外負擔。並且執行緒間的共享變數可能造成死鎖的出現。

各自適用場合

在了解了執行緒與非同步操作各自的優缺點之後,我們可以來**一下執行緒和非同步的合理用途。我認為:當需要執行i/o操作時,使用非同步操作比使用執行緒+同步 i/o操作更合適。i/o操作不僅包括了直接的檔案、網路的讀寫,還包括資料庫操作、web service、httprequest以及.net remoting等跨程序的呼叫。

而執行緒的適用範圍則是那種需要長時間cpu運算的場合,例如耗時較長的圖形處理和演算法執行。但是往 往由於使用執行緒程式設計的簡單和符合習慣,所以很多朋友往往會使用執行緒來執行耗時較長的i/o操作。這樣在只有少數幾個併發操作的時候還無傷大雅,如果需要處 理大量的併發操作時就不合適了。

the client-side asynchronous capabilities of a web service are defined by the underlying development environment, in this case, .net.  the wsdl toolkit (wsdl.exe) included with the .net sdk generates two types of asynchronous methods: begin\end and async\completed.  both are completely valid and supported in .net 2.0, 3.0, and 3.5.  note, using 「add web reference」 within visual studio 2005 will only generate the async\completed methods.  to construct both, use wsdl.exe on the command line.   

the begin\end pattern has existed since .net 1.1 and uses a callback technique for managing and tracking an asynchronous call.  the async\completed pattern was introduced in .net 2.0 as an event-driven asynchronous model.    both techniques initiate a call to the remote web service on a threadpool thread.

非同步呼叫和多執行緒呼叫

同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 現在新建乙個windows應用程式,然後放上乙個button1,寫入以下 c code private void button...

JAVA多執行緒實現非同步呼叫

時間 只需要領個提貨單就可以了 去幹別的事情 等到蛋糕做好了,再拿提貨單取蛋糕就可以了。package com.somnus async description 顧客 date 2016年3月9日 下午7 20 41 version 1.0 public class customer catch i...

多執行緒同步與委託,方法的非同步呼叫

執行緒同步即執行緒間對於cpu資源的協調,一次只有乙個執行緒占用資源。進行執行緒同步的方法 1.執行緒1呼叫方法,執行緒2在執行結束後呼叫resume 方法喚醒工作執行緒,此方法需借助sleep 方法協調時間,不靈活。容易出問題,比如執行緒1還沒有suspend 執行緒2就resume 或者後台程序...