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

来源:http://www.cnblogs.com/net515/archive/2016/09/22/5894948.html
-Advertisement-
Play Games

一、併發的基本含義 在操作系統中,併發是指一個時間段中有幾個程式都處於已啟動運行到運行完畢之間,且這幾個程式都是在同一個處理機上運行,但任一個時刻點上只有一個程式在處理機上運行。 在關係資料庫中,允許多個用戶同時訪問和更改共用數據的進程。SQL Server 使用鎖定以允許多個用戶同時訪問和更改共用 ...


一、併發的基本含義
        在操作系統中,併發是指一個時間段中有幾個程式都處於已啟動運行到運行完畢之間,且這幾個程式都是在同一個處理機上運行,但任一個時刻點上只有一個程式在處理機上運行。
在關係資料庫中,允許多個用戶同時訪問和更改共用數據的進程。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/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 gzip是linux自帶的壓縮文件命令,它的壓縮比大概能達到60%-70%,比zip的壓縮比更高。使用gzip壓縮預設會在文件後加上.gz尾碼並將源文件刪除。gunzip是解壓縮命令。 gzip 1.不指定路徑 gzip filename [root@master backup]# ll to ...
  • • 微博: 小樣兒老師2015 關於 嚴格來說,本文題目應該是我的單片機、DSP和ARM+Linux學習之路,但這個寫法實在太繞口——況且嵌入式往往暗指MCU,DSP,ARM等微處理器加上嵌入式操作系統,所以我認為本文題目是合理的。 這篇文章講了什麼? • 我這些年學單片機、DSP和ARM+Linu ...
  • 創建基於對話框的Win32應用程式(三) —— Checkbox的應用、窗體置頂、設置圖標 上一節創建的窗體應用程式中,我們用到了Button和StaticText這兩個控制項。這一節中我們將學習使用Checkbox控制項,並實現將窗體置頂的功能。 17、首先切換到Reasource View(Ctrl ...
  • 思路: 1、查看有無安裝過mysql 或 2、查看有無安裝包 3、安裝mysql服務端 4、啟動&&停止 a、設置資料庫預設字元 在mysql配置文件/etc/my.cnf中加入default-character-set=utf8 b、設置開機自啟動 c、啟動mysql 5、登錄 a、創建root管 ...
  • 今天,開始記錄我的前端技術生涯! 今天,開始記錄我的博客園生涯! 今天,技術!產品!技術+產品=能力!!! 開啟新的生活!!! ...
  • 創建基於對話框的Win32應用程式(二) —— Button的應用、新建子窗體 可以發現上一節創建的窗體中,點擊OK和Cancel兩個按鈕是沒有任何反應的。現在我們來為他們添加退出對話框的功能。 6、首先定義命令消息響應函數(Dlg_OnCommand)如下: 其中IDOK和IDCANCEL分別是按 ...
  • 一.創建一個空項目 請查看 新建 .NET Core 項目 -- Hello World! 一節,新建一個項目: 二.添加引用並修改配置為 Web API (.NET Core 已將 MVC/Web API 底層代碼及表層編程介面合二為一) 修改 .vscode\launch.json 文件 代碼如 ...
  • 下麵介紹各種List的sort的用法與比較 首先,我們建一個People的實體,有name、age、sex的屬性,我們要排序的欄位是年齡age 新建一個實體類 新建list的數據 1. 第1種排序方法,使用 IComparer 可以看到第一種方法比價麻煩,要新建一個新的類來做 2. 第2種排序方法, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...