程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 互聯網開發(一) 並發基礎知識,並發基礎知識

互聯網開發(一) 並發基礎知識,並發基礎知識

編輯:關於.NET

互聯網開發(一) 並發基礎知識,並發基礎知識


一、並發的基本含義
        在操作系統中,並發是指一個時間段中有幾個程序都處於已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。
在關系數據庫中,允許多個用戶同時訪問和更改共享數據的進程。SQL Server 使用鎖定以允許多個用戶同時訪問和更改共享數據而彼此之間不發生沖突。
在網絡服務器上,並發是指同一時刻能處理的連接數,可以理解為服務器最多維護多少個會話數,比如,服務器能建立1000個TCP連接,即服務器同時維護了1000個socket,這個服務器的並發量就是1000,但是服務器可能只有單核或者8核,16核等,總之對這1000個socket連接的處理也是分時來做的。每個socket服務器處理的時間如果是1s,那麼該服務器1s內可以處理完1000個請求,如果每個socket處理100ms的話,那麼該服務器1s內可以處理10000個請求。
二、與並行區別
        並發:當有多個線程在操作時,如果系統只有一個CPU,則它根本不可能真正同時進行一個以上的線程,它只能把CPU運行時間劃分成若干個時間段,再將時間 段分配給各個線程執行,在一個時間段的線程代碼運行時,其它線程處於掛起狀。.這種方式我們稱之為並發(Concurrent)。
並行:當系統有一個以上CPU時,則線程的操作有可能非並發。當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶占CPU資源,可以同時進行,這種方式我們稱之為並行(Parallel)。
        區別:並發和並行是即相似又有區別的兩個概念,並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔內發生。在多道程序環境下,並發性是指在一段時間內宏觀上有多個程序在同時運行,但在單處理機系統中,每一時刻卻僅能有一道程序執行,故微觀上這些程序只能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以並發執行的程序便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可並發執行的程序,這樣,多個程序便可以同時執行。
三、IIS中的並發管理
        1、IIS中並發相關術語、設置
        ▲連接數、並發連接數:這兩個概念網上的解釋都是說不同的,但通過實驗,筆者發現在IIS中他們一個概念,就是在對並發連接,即站點可以同時容納客戶請求的最高連接數做設置,而且我通過設置兩個參數發現會互相影響。可能網上說的連接數是專指虛擬主機的環境吧。
        ▲最大並發工作線程數:簡單的說就是IIS在並發連接請求過來時的處理機制,它會更機智的以某個數量級為單位來分批處理,讓沒有處理連接請求排隊等待。比如最大並發工作線程數設置為50,當200個連接請求過來時,50個請求被處理,剩下的150會顯示正在加載,而不是503的錯誤。這時其它用戶就不要點刷新按鈕了,因為點的越多,你的請求在排隊隊伍中越靠後。此項設置未在IIS中,而是修改ASP.NET配置文件machine.config(Win10默認位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\ 修改參考:https://msdn.microsoft.com/zh-cn/library/7w2sway1.aspx)
        ▲應用程序池的隊列長度:上一個概念提到請求排隊,那是不是讓所有未處理的都排隊呢,顯示是不合理的。通過此項可以設置排隊的數量,超過數量的仍然返回503錯誤,與超過並發連接數一樣的效果。
        ▲應用程序池的最大工作進程數:如果這個值大於 1,那麼當有連接請求時會啟動多個新的工作進程實例,可啟動的最多進程數為您所指定的最大工作進程數,後續更多的請求將以循環的方式發送至工作進程,這個 每個工作進程都能承擔負載一些連接請求,當然是以消耗cpu等硬件做代價,這是值得的,如果web服務器cpu使用率很低但是又需要更高效的處理並發連接 請求,為何不這麼做呢?
        如果網站中用到了依賴進程的Session和Cache等對象,則不能保存在服務器內存中,存儲方式選用StateServer或者SQLServer會更好,另外多個工作進程切換時會有上下文復制,這也是資源消耗更多地方
        最大工作進程數的設置方法:(拷貝)按照每工作進程能承載30個並發的原則來確定應用程序池的最大工作進程數。同時要注意,每個工作進程大約會占用 200M左右的系統內存,在設置最大工作進程數的時候,要主要最大工作進程數與200M的乘積不要超過系統最大可用內存數。一般情況下,建議按照每次增加 5個工作進程數的方式對最大工作進程數進行調整,調整完後對網站觀察一段時間,如依然無法滿足要求,再繼續增加5個工作進程數。
        2、觀察並發連接數
a:命令行方式查看IIS連接請求的狀態統計
C:\>netstat -an |find "10.0.1.13:80" |find "ESTABLISHED" /C
1297
C:\>netstat -an |find "10.0.1.13:80" |find "TIME_WAIT" /C
129
b:利用nagios監控的windows客戶端工具NSClient++-0.2.7對相應的計數器進行監控,超過一定的阈值則通過fetion報警!
c:計數器的添加,利用計數器可以圖形化的展示出來。
步驟:運行命令 “perfmon.msc”打開性能監視器,點擊添加計數器。計數器對象選擇【Web Service】->【Current Connections】;對象實例選擇【_Total】,也可根據需要選擇具體的Web服務
實例;點擊【添加】按鈕,結果如下圖所示。

將和本監控無關的信息刪除,僅留下關心的Web服務信息。從多個客戶端發出並發請求,可以監控到實時的並發連接數。根據圖中顯示結果,不難發現當前同時刻並發連接數為5個。

可以通過右擊計數器打開屬性對圖表做一些設置,如顏色、步長等。


參考:http://blog.csdn.net/coolmeme/article/details/9997609
http://www.cnblogs.com/qmfsun/p/4997307.html
http://ylw6006.blog.51cto.com/470441/1058070/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved