偶在上次的post裡關於iis的執行緒問題犯鳥錯,這裡更正錯誤,偶誤導大家(一部分人),偶有罪,偶悔過。這裡對執行緒問題加以說明,以更正我的問題。
今天看到
這篇post,所以兼談以下看法。
上次在一片衝突激烈的post裡非常想當然的地提出了iis乙個session乙個執行緒的說法,後來@雙魚座同志指出了偶的錯誤,後經思考論證,證明他的說法部分是正確的(不過有點小錯誤,不知是否我會錯了意,後面來說)。乙個session確實不止乙個執行緒。
對於iis來說,session是乙個長期存在的資料結構(失效期為20分鐘,預設,iis裡可以設定),在每乙個ie程序第一次連線的時候就會建立乙個session,不管會不會第二次連線,都會儲存設定的失效時間,如果用乙個執行緒來一直處理這個session顯然是不合適的,執行緒和資料庫連線一樣都是比較昂貴的資源,這樣子浪費顯然是不現實的,經過測試,應該是每一次request,asp.net都會從執行緒池拿個執行緒出來handle,經測試應該建立session和第一次request是同乙個(找不到相關資料,也許是沒有花太多時間找的緣故,可能是個偶然),後面的就不一定了,根據@雙魚座的測試方法可以測出兩個。但是,對於每一次request,都是執行緒安全的,也就是說,在page裡的所有非靜態方法都是執行緒安全的-在page裡自己不建立執行緒的前提下(@雙魚座同志在這裡有所謬誤,因為page在乙個request週期只會單執行緒訪問,所以session結構在page裡呼叫是執行緒安全的,所以sesison沒有lock,unlock-要自己建立執行緒另當別論,session結構本身不是執行緒安全的),從page裡所呼叫的一切物件的非靜態方法都是執行緒安全的(前提也是自己不建立執行緒去呼叫)。
很多時候我們在編寫asp.net的程式的時候沒有重視多執行緒的問題,這裡看來還是必須重視的。
這裡注意,session有兩層含義,乙個是概念上的session(會話),乙個是session結構,session結構是可以在asp.net的工作程序內也可以在程序外提供的,在裡面存東西也要考慮垮邊界的問題。
對於執行緒得安全,還有一點值得注意的是,乙個靜態方法,如果沒有呼叫其他方法,而且也不操作任何靜態變數,那麼它不需要加鎖,因為它是執行緒安全的,所以執行緒安全是因為有了狀態(類的狀態,物件的狀態)造成的問題,而所有無狀態的方法是執行緒安全的。
還有就是針對引用的那篇post,多執行緒的問題,多執行緒對於單cpu的意義遠不如多cpu計算機來的那麼大。在單cpu計算機使用多執行緒要充分考慮執行緒切換所帶來的消耗,如果所榨取的cpu時間還不如切換執行緒所帶來的消耗大,那就得不償失了。
Post和Get的區別 兼談頁面間傳值的方式
從乙個頁面轉向另乙個頁面的請求方式有兩種,post和get.如果從原理上來 他們的區別,涉及到http傳輸協議的細節,本文不加 只討論一下表象。所有的人都知道如下區別 1.post傳輸資料時,不需要在url中顯示出來,而get方法要在url中顯示。2.post傳輸的資料量大,可以達到2m,而get方...
關於執行緒的問題
其實這個問題糾結很久了,很多版本也不一樣,現在也不是很清楚,把現在的情況整理一下吧 1 首先通過通過gpu z或者cuda z會看到有多少個流多處理器 多少個流處理器 每個流多處理器會有多少個threads,每個block至少多少個threads等,關鍵是執行緒的分配問題,是不是乙個sp 流處理器 ...
關於layer彈窗取值問題簡談
記錄日常 最近在使用layer彈窗控制項的過程中,發現使用 val 無法獲取input的值。當時和同事試了網上的各種val 取值的方法以及查詢了網上的原因,發現網上沒有乙個合適解決的方法以及合理的解釋,真的很苦惱。後來同事發現了乙個辦法,可以獲取值,但是可能造成頁面格式的一丟丟的改變,現在把解決的方...