PC + 手機 + 微信網站(zhàn) + 小(xiǎo)程序 + APP,五端合一
我們已經知道(dào)了同步的基本定義和(hé)一些(xiē)示例,那(nà)麽讓我們拓寬一-下討(tǎo)論,看看應用中的同步調用和(hé)異步調用。同步調用是在調用返回時(shí)才能完全執行(xíng)它們的動作(zuò)。如果一個(gè)方法被調用了,控制(zhì)權被轉給該方法來(lái)行(xíng)使,那(nà)麽隻有(yǒu)當該方法完成了自己要執行(xíng)的操作(zuò),成功地返回了或者返回有(yǒu)錯時(shí),應用中調用該方法的地方才會(huì)重新得(de)到控制(zhì)權。換而言之,同步方法先被調用,然後它們執行(xíng)操作(zuò),當它們完成時(shí),會(huì)返還(hái)控制(zhì)權。
作(zuò)為(wèi)同步方法的一個(gè)示例,讓我們來(lái)看看AllScale公司的HRM服務中的一個(gè)方法query_ exec。該方法用于構建和(hé)執行(xíng)一個(gè)動态的數(shù)據庫查詢。query_ exec方法中的一個(gè)步驟是建立一一個(gè)數(shù)據庫連接。在得(de)到這個(gè)數(shù)據庫連接任務成功完成了的明(míng)确确認之前,query. exec方法不會(huì)繼續執行(xíng)。這樣做(zuò)既浪費資源,又浪費時(shí)間(jiān)。如果數(shù)據庫不可(kě)用,那(nà)麽該應用就不應該把時(shí)間(jiān)浪費在創建查詢、等待數(shù)據庫恢複可(kě)用上(shàng)。事實上(shàng),如果數(shù)據庫不可(kě)用了,,看看如何劃分數(shù)據庫來(lái)提高(gāo)它的可(kě)用性。盡管如此,這是個(gè)說明(míng)同步調用是 如何工作(zuò)的例子。因此,發起調用的方法會(huì)被暫停,直到被調用的進程返回結果之前,它是不能完成的。
另一個(gè)說明(míng)同步性的非技(jì)術(shù)示例是兩個(gè)人(rén)之間(jiān)的溝通(tōng),這可(kě)以是面對面,也可(kě)以是通(tōng)過電(diàn)話(huà)。如果這兩個(gè)人(rén)都忙于有(yǒu)意義的談話(huà),那(nà)麽就不太可(kě)能發生(shēng)其他的動作(zuò)。其中一人(rén)如果不停止與另一人(rén)的談話(huà),那(nà)麽很(hěn)難再與第三個(gè)人(rén)開(kāi)始交談。電(diàn)話(huà)會(huì)直占線,直到兩個(gè)人(rén)中的一個(gè)或者兩者挂斷了電(diàn)話(huà)。
與同步方法或進程相對的是異步方法。在異步方法調用中,會(huì)在一個(gè)新的線程中調用一個(gè)方法,這個(gè)方法會(huì)立即把控制(zhì)權返回給調用它的線程。描述異步方法調用的設計(jì)模式叫作(zuò)異步設計(jì)或異步方法調用(AMI)。這個(gè)異步調用的方法會(huì)在另一個(gè)線程中繼續執行(xíng),或成功結束或出現錯誤,但(dàn)都不會(huì)再與發起它的線程有(yǒu)進一步的交互。 讓我們再來(lái)看看AllScale公司的query exec方法。在調用了同步方法,建立數(shù)據庫連接後,該方法需要準備和(hé)執行(xíng)查詢了。在HRM系統中,AllScale公司有(yǒu)一個(gè)監控框架,能夠用來(lái)觀察所有(yǒu)查詢的持續時(shí)間(jiān)以及查詢是否成功了,這個(gè)框架采用了異步調用方法start query_ time和(hé)end query time。這些(xiē)方法會(huì)把一個(gè)系統時(shí)間(jiān)存儲在內(nèi)存中,等待調用的結束,以便計(jì)算(suàn)查詢的持續時(shí)間(jiān)。然後這個(gè)持續時(shí)間(jiān)會(huì)被存儲在一個(gè)監控數(shù)據
庫中,通(tōng)過查詢這個(gè)數(shù)據庫,可(kě)以根據查詢運行(xíng)時(shí)間(jiān)的長短(duǎn)了解系統運行(xíng)狀況如何。雖然監控查詢的性能很(hěn)重要,但(dàn)讓查詢真正服務于用戶的請(qǐng)求更為(wèi)重要。因此,start query time和(hé)lend query_time這些(xiē)方法是以異步模式調用的。如果它們運行(xíng)成功并返回了結果,那(nà)麽AllScale公司的運營團隊和(hé)軟件開(kāi)發團隊就能從監控數(shù)據庫中得(de)到查詢時(shí)間(jiān)。即使監控調用失敗了,或者連接監控數(shù)據庫花(huā)了20秒(miǎo)的時(shí)間(jiān),這些(xiē)團隊都不會(huì)在乎。用戶的查詢仍然在運行(xíng),它們根本不關心這些(xiē)異步調用。
回到我們人(rén)際溝通(tōng)的示例,電(diàn)子郵件是個(gè)異步通(tōng)信的很(hěn)好例子。你(nǐ)寫了電(diàn)子郵件并把它發出去後,可(kě)以立即去做(zuò)其他的事情,可(kě)以寫另一封郵件, 也可(kě)以打一輪高(gāo)爾夫球或者其他什麽事情。當回複的郵件在一個(gè)合适的時(shí)候到達時(shí),你(nǐ)可(kě)以閱讀這封回複的郵件,并可(kě)能發出另一封郵件,作(zuò)為(wèi)回複。這個(gè)網站(zhàn)設計(jì)的溝通(tōng)鏈除了需要為(wèi)處理(lǐ)溝通(tōng)和(hé)寫回信花(huā)費點時(shí)間(jiān)之外,不會(huì)妨礙發送者和(hé)接收者的任何其他活動。
上(shàng)一篇:網頁制(zhì)作(zuò)