在你的服務(wù)器端代碼中使用線(xiàn)程與創(chuàng)建異步處理
發(fā)表時(shí)間:2023-08-16 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]小結(jié): 對(duì)于開(kāi)發(fā)者來(lái)說(shuō)幸運(yùn)的是:線(xiàn)程在asp.net中遠(yuǎn)遠(yuǎn)比在asp中來(lái)的容易。本篇文章中,作者注視線(xiàn)程于asp.net http pipeline中,同時(shí)解釋線(xiàn)程在開(kāi)發(fā)者沒(méi)有卷入的情況是如何被高...
小結(jié): 對(duì)于開(kāi)發(fā)者來(lái)說(shuō)幸運(yùn)的是:線(xiàn)程在asp.net中遠(yuǎn)遠(yuǎn)比在asp中來(lái)的容易。本篇文章中,作者注視線(xiàn)程于asp.net http pipeline中,同時(shí)解釋線(xiàn)程在開(kāi)發(fā)者沒(méi)有卷入的情況是如何被高效管理的。 本篇文章考慮CLR線(xiàn)程池是如何被asp.net 服務(wù)請(qǐng)求使用的,還有池在處理,模型,和應(yīng)用的機(jī)制,覆蓋惡劣IIS5 和IIS6,及它們?cè)谡?qǐng)求處理和線(xiàn)程分配的不同。最后,探討了對(duì)于需要使用線(xiàn)程的開(kāi)發(fā)者來(lái)說(shuō),何時(shí)和如何使用異步處理在他們的應(yīng)用中。
在傳統(tǒng)的asp中,開(kāi)發(fā)者面對(duì)線(xiàn)程問(wèn)題之于他們知道應(yīng)該要做什么要多。因?yàn)閍sp是建立于com之上的,關(guān)于元件的線(xiàn)程需求這兒有非常詳細(xì)而精確的規(guī)范。頁(yè)面所使用的元件為了最大效率原因需要置于公寓線(xiàn)程中。相反地,在Session 和應(yīng)用狀態(tài)中的元件需要便捷的環(huán)境并且能夠聚合于自由線(xiàn)程集合中,也能夠保護(hù)他們的狀態(tài)防止被并發(fā)的訪(fǎng)問(wèn)。
如果你查看asp.net的文檔,結(jié)果你會(huì)發(fā)現(xiàn)關(guān)于線(xiàn)程需求是如此之少。難道這就意味著所有的線(xiàn)程問(wèn)題都被解決了并且asp.net開(kāi)發(fā)者可以放心的去開(kāi)發(fā)他們的aspx頁(yè)面和NFC沒(méi)有混亂在并發(fā)問(wèn)題上? 不,大多數(shù)情況下并不是這樣。
本文中,我將在不增加開(kāi)發(fā)者負(fù)擔(dān)的情況下,探索http 管道中線(xiàn)程的細(xì)節(jié)和如何有效的管理線(xiàn)程。同時(shí)我將看一下asp.net如何使用CLR 線(xiàn)程池處理服務(wù)請(qǐng)求的。
Asp.net中的線(xiàn)程
為了有效的服務(wù)多個(gè)客戶(hù)請(qǐng)求,Web Server 通過(guò)使用多個(gè)進(jìn)程或生成多個(gè)線(xiàn)程來(lái)響應(yīng)服務(wù)請(qǐng)求。Asp.net 沒(méi)使用異常和在一個(gè)進(jìn)程中響應(yīng)請(qǐng)求使用多個(gè)線(xiàn)程;谶@個(gè)現(xiàn)狀,asp.net開(kāi)發(fā)者不需要關(guān)心多線(xiàn)程環(huán)境問(wèn)題。頁(yè)面需求響應(yīng)總是在一個(gè)線(xiàn)程中, 并且當(dāng)有一個(gè)新的需求時(shí),一個(gè)新的頁(yè)面將會(huì)創(chuàng)建一個(gè)截然不同的實(shí)例。應(yīng)用的不同實(shí)例和模型元件總是被響應(yīng)每一個(gè)請(qǐng)求。 然而,理解如何使用線(xiàn)程來(lái)響應(yīng)請(qǐng)求是非常重要的。
開(kāi)始之際,asp.net使用CLR線(xiàn)程池響應(yīng)請(qǐng)求。池的大小在機(jī)器配置文件中(machine.config),默認(rèn)被設(shè)置為25工作線(xiàn)程 和25個(gè)I/O線(xiàn)程:
<processModel enable="true"
•••
maxWorkerThreads="25"
maxIoThreads="25" />
(待續(xù))