日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异步编程到底在说啥?

發(fā)布時間:2024/8/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步编程到底在说啥? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


作者 | 碼農(nóng)的荒島求生

來源 | 碼農(nóng)的荒島求生

之前很多同學在微信上問能不能講講異步編程是怎么一回事兒,今天就和大家簡單聊一聊這個話題。

我們以函數(shù)調(diào)用為例,假設(shè)有這樣的代碼:

void B() {lines = read(filename);sum(lines); }void A() {...B();... }

代碼非常簡單,B函數(shù)讀取一個文件,文件里保存的是一行行數(shù)據(jù),然后加和,A函數(shù)中的某個位置調(diào)用B函數(shù)。

此時,我們說這是同步調(diào)用,因為A函數(shù)后續(xù)代碼必須等待B函數(shù)處理完文件才能繼續(xù)執(zhí)行。

隨著業(yè)務(wù)不斷發(fā)展,B函數(shù)處理的文件越來越龐大,此時處理一次文件耗時2小時,假設(shè)A函數(shù)后還有一行重要的代碼:

void A() {...B();something_important();... }

這就意味著調(diào)用B函數(shù)后需要等待2個小時才能執(zhí)行到something_important這行代碼,而something_important函數(shù)對時間要求非常苛刻,該怎樣改進呢?

其實很簡單,我們可以在B函數(shù)內(nèi)部創(chuàng)建一個線程,在線程中處理文件:

void handle_file() {lines = read(filename);sum(lines); }void B() {thread t(handle_file); }void A() {...B();something_important();... }

這樣B函數(shù)被調(diào)用后創(chuàng)建完線程即可立即返回,緊接著開始執(zhí)行something_important這行代碼,CPU在執(zhí)行something_important這行代碼時可能文件還沒有開始處理,這樣函數(shù)A不再依賴于文件處理,這時我們說函數(shù)B函數(shù)就是異步調(diào)用的,函數(shù)A異步于文件處理。

如果是在單核系統(tǒng)下,CPU會不斷在處理文件線程和A函數(shù)線程間切換,看上去這兩個線程就好像在同時運行,但如果是在多核系統(tǒng)下,這兩個線程可以真正的并行起來。

在編程語境下,異步往往和線程進程等相關(guān)

最后舉一個例子。

同步就好比你排隊去自助售票機取電影票(話說小風哥已經(jīng)很久很久沒有去電影院看電影了),你必須排隊等待前一個人取完電影票才能到你,你不能在前一個取票的過程中取自己的票,這時我們說取電影票時你和前一個人是同步的。

而異步就好比去吃大餐,你在座位上看菜單點菜,其它人也可以點菜,你不需要等待其它人吃完飯才能下單,這時我們說你點菜和其它人吃飯是異步的。

往期推薦

直接root Android設(shè)備,你知道嗎?

我們到底需要什么樣的低代碼平臺?

清華大學:2021元宇宙研究報告

Mendix 發(fā)布全球低代碼報告

點分享

點收藏

點點贊

點在看

總結(jié)

以上是生活随笔為你收集整理的异步编程到底在说啥?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。