2009-08-24 48 views
4

我在我的ASP.NET MVC應用程序的內存會話中使用,這意味着我只能有一個單一的工作線程正確嗎?這是否意味着我的應用程序中有並行處理(併發請求)?我的應用程序一次只接受1個請求嗎?ASP.NET單工線程? (在內存中)

編輯:根據IIS7網站:

If the application uses in-process session variables, 
the application will not function correctly, because the same user requests 
are picked up by different worker processes that 
do not share the same session details. 

因此,這意味着在內存中的會話只能有1個工作者線程或不?另請參閱IIS7論壇中的here

+0

流程和線程在ASP.NET和IIS的上下文中意味着不同的東西。多個進程意味着你有多個會話存儲。 – 2009-08-24 02:17:00

回答

3

您的應用程序一次接收多個請求。根據您在此處的編輯和評論,您正在尋找有關Web Gardens和會話的信息,而不是線程和會話狀態。

當涉及到會話狀態時,Web Gardens使用多個進程並像負載平衡器一樣工作。每個進程都有一個單獨的內存會話存儲。 IIS將發送請求到任何可用的進程。由於進程不共享會話狀態,因此如果會話提供程序在所有Web花園進程之間共享,會話使用情況纔會真正起作用。

Web Gardens只有在您使用類似SQL Server的會話狀態,並且希望與特定的CPU /內核具有親和性時纔有意義。由於您可以增加線程的數量,因此對於某些用戶而言,這可能比使用Web花園更合適。但是,由於特定的工作負載或應用程序特性,某些應​​用程序可能在網絡園林中表現更好。在測試中使用網絡園還可以幫助解決負載平衡中存在的一些潛在問題。

我相信它使用.NET ThreadPool,默認情況下有20個線程。進入服務器的每個請求都可以在單獨的線程上處理。 ASP.NET performance guidelines有關於此主題的一些信息。

+0

這不會在內存會話中造成問題嗎?據我所知,這些會議需要停留在同一個線上,否則一切都會爆炸。 – Alex 2009-08-24 02:10:05

+0

我不明白爲什麼線程會鏈接到會話。會話ID應該足以查找會話數據,因此沒有理由需要映射到同一個線程。會話數據即使在「內存」中也會單獨存儲。相同的API用於插入其他會話提供程序。 – 2009-08-24 02:13:08

+0

用IIS7網站和論壇鏈接的引用更新了問題。假設進程中(內存中)會話不跨工作線程共享信息。這是錯誤的信息? – Alex 2009-08-24 02:16:16

-1

在存儲會話意味着你通常應該只有一個前端Web 服務器的時間,不是一個單一的工作線程:d

的原因是存儲在會話一臺機器上的任何信息不另一個可用。如果您有兩臺前端Web服務器,並且您的代理或防火牆會執行「負載平衡」,從而將請求隨機分配給Web服務器,那麼您將遇到問題。也就是說,問題很容易通過所謂的「粘性會話」來解決,用戶總是被髮送到同一臺服務器。

-Oisin

+0

後續行動:爲什麼你不能在你的機器上啓用'網絡花園'處理,然後跨越一臺服務器上的多個CPU?這會導致隨機會話丟失。 – Alex 2009-08-24 02:12:10

+0

我的理解是,網絡花園在機器上創建多個進程。每個進程都有不同的會話狀態存儲。 – 2009-08-24 02:14:30