卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

怎么實(shí)現(xiàn).NET網(wǎng)站異步處理?

網(wǎng)友解答: 在架構(gòu)領(lǐng)域,我們經(jīng)常聽(tīng)見(jiàn)別人說(shuō)“異步”,另外大家在面試中也經(jīng)常會(huì)遇到這方面的問(wèn)題。什么是異步?說(shuō)到.NET異步,先來(lái)說(shuō)幾個(gè)比較容易混淆的概念:1、多線(xiàn)程:一般指同一進(jìn)程中多個(gè)

網(wǎng)友解答:

在架構(gòu)領(lǐng)域,我們經(jīng)常聽(tīng)見(jiàn)別人說(shuō)“異步”,另外大家在面試中也經(jīng)常會(huì)遇到這方面的問(wèn)題。

什么是異步?

說(shuō)到.NET異步,先來(lái)說(shuō)幾個(gè)比較容易混淆的概念:

1、多線(xiàn)程:一般指同一進(jìn)程中多個(gè)線(xiàn)程協(xié)作運(yùn)行。在多核計(jì)算機(jī)中多個(gè)線(xiàn)程將有機(jī)會(huì)同時(shí)運(yùn)行于多個(gè)核上,如果線(xiàn)程中進(jìn)行的是計(jì)算,則行成并行計(jì)算。

2、并行:一般指并行計(jì)算,是說(shuō)同一時(shí)刻有多條指令同時(shí)被執(zhí)行,這些指令可能執(zhí)行于同一CPU的多核上,或者多個(gè)CPU上,或者多個(gè)物理主機(jī)甚至多個(gè)網(wǎng)絡(luò)中。

3、異步:與同步相對(duì)應(yīng),是指呼叫另一操作后,不等待其結(jié)果,繼續(xù)執(zhí)行之后的操作,若之后沒(méi)有其他操作,當(dāng)前線(xiàn)程將進(jìn)入睡眠狀態(tài),而CPU時(shí)間將有機(jī)會(huì)切至其他線(xiàn)程。在異步操作完成后通過(guò)回調(diào)函數(shù)的方式獲取通知與結(jié)果。

在Web中為什么要使用異步?

在 web 應(yīng)用程序看到大量在啟動(dòng)時(shí)的并發(fā)請(qǐng)求或具有突發(fā)負(fù)載 (其中會(huì)增加并發(fā)情況突然),進(jìn)行異步 web 服務(wù)調(diào)用將增加你的應(yīng)用程序的響應(yīng)能力。 異步請(qǐng)求采用相同量的時(shí)間來(lái)處理與同步請(qǐng)求。

例如,如果某個(gè)請(qǐng)求生成 web 服務(wù)調(diào)用,則需要兩秒鐘來(lái)完成,請(qǐng)求所執(zhí)行的兩秒內(nèi)是否執(zhí)行同步或異步。 但是,在異步調(diào)用,線(xiàn)程則無(wú)需必須等待第一個(gè)請(qǐng)求完成時(shí)響應(yīng)其他請(qǐng)求。 因此,異步請(qǐng)求可以防止出現(xiàn)請(qǐng)求排隊(duì)和線(xiàn)程池增長(zhǎng)時(shí)有許多并發(fā)請(qǐng)求調(diào)用長(zhǎng)時(shí)間運(yùn)行的操作。

異步的實(shí)現(xiàn)方式

異步的實(shí)現(xiàn)方式有多種,比如多線(xiàn)程。多線(xiàn)程將異步操作放入另一線(xiàn)程中運(yùn)行,通過(guò)輪詢(xún)或回調(diào)方法得到完成通知。

多線(xiàn)程實(shí)現(xiàn)異步調(diào)用可以采用傳統(tǒng)的Thread類(lèi)來(lái)實(shí)現(xiàn),Task來(lái)實(shí)現(xiàn)以及 async/await 關(guān)鍵字實(shí)現(xiàn)。

對(duì)于Thread來(lái)說(shuō),當(dāng)多個(gè)異步方法需要協(xié)助時(shí),代碼將顯得十分復(fù)雜,為此我們需要一個(gè)更好的異步模型,從.NET4開(kāi)始,引入了新的異步模型。下面來(lái)看一段代碼:

我們不再關(guān)心任務(wù)如何去開(kāi)始,何時(shí)會(huì)結(jié)束,一切變成了一些有關(guān)或無(wú)關(guān)的任務(wù)。

對(duì)于封裝一個(gè)由多個(gè)異步方法組合成的異步方法, 組合異步方法調(diào)用后,按順序調(diào)用第一個(gè)異步方法,緊接著,產(chǎn)生需要的結(jié)果Task后返回。異步方法完成時(shí)回調(diào)指定的方法,并按順序繼續(xù)調(diào)用,所有方法完成后,把運(yùn)行的最終結(jié)果設(shè)置給結(jié)果Task,那么整個(gè)任務(wù)即完成。 如果異步方法有返回值,那么組合的異步方法看上去會(huì)復(fù)雜一點(diǎn)。類(lèi)似下圖所示:

為了解決這個(gè)問(wèn)題,微軟提供了一個(gè)非常好用的語(yǔ)法糖:async/await 關(guān)鍵字。下面我們來(lái)看一段代碼:

他幾乎和同步方法書(shū)寫(xiě)一致,代碼量也比較少,程序的邏輯也很清晰,當(dāng)然可讀性更強(qiáng)。

總結(jié)

關(guān)于.NET網(wǎng)站異步處理分享到這里,這里做個(gè)總結(jié):

1、.NET網(wǎng)站異步處理可以采用3中方式實(shí)現(xiàn):Thread,Task,async/await;

2、Task出現(xiàn)是為了Thread的不足,async/await出現(xiàn)也是為了彌補(bǔ)Task的不足。大家有沒(méi)有發(fā)現(xiàn)這個(gè)關(guān)系就像一條線(xiàn)一樣。其實(shí)說(shuō)到底這些都是多線(xiàn)程技術(shù),底層都是Thread實(shí)現(xiàn),只不過(guò)微軟為了代碼的可讀性以及邏輯的清晰性,做了語(yǔ)法糖,從而更加方便開(kāi)發(fā)人員使用。

3、在C#5中,添加了 async/await 關(guān)鍵字,使得上面遺留的問(wèn)題得以解決,而且重點(diǎn)是,用起來(lái)非常簡(jiǎn)單!

4、NET Framework 4 引入了異步編程概念, ASP.NET 4.5 支持任務(wù), 于是就有了async/await 。

以上就是我的觀(guān)點(diǎn),對(duì)于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評(píng)論區(qū)交流 ~ 我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),歡迎關(guān)注我了解更多科技知識(shí)!
標(biāo)簽: