1. 介紹
1.1 高併發伺服器
(1)要求大規模的連線
/會話可能同時進行
(2)列子
:web
伺服器,
郵件伺服器
1.2 執行緒池架構
(1) 每個連線分配乙個執行緒,將導致過多的執行緒。
(2) 執行緒消耗記憶體,
比如堆疊等等。
2. 執行緒模型
2.1 基於會話模型
(1) 每個執行緒服務於乙個客戶端,
比如http
會話。
(2) 執行緒被用於狀態跟蹤和cpu
排程。
(3) 活躍執行緒的數量等於併發客戶端會話的數量
2.2 基於i/o模型
(1) 將狀態跟蹤從cpu
排程中分離出來。
(2) 執行緒是所有同質,僅為i/o
呼叫保持狀態。
(3) 乙個執行緒可以服務於不同的會話,在不同的時刻。
(4) 乙個會話可以被服務,通過不同的執行緒,在不同的時刻。
(5) 因此,從乙個執行緒不是專門對於乙個會話,僅僅專門對於乙個i/o
請求處理。
3. 基於i/o
的執行緒排程
3.1 併發限制
(1) 執行緒是和cpu繫結
最大活躍執行緒的個數 == cpu個數
(2) 執行緒是和i/o繫結
最大的工作執行緒個數 >= i/o
並行個數
(3) 根據實驗/
基準設定
3.2 執行緒池大小
(1) 執行緒是和cpu繫結
等於併發限制數
(2) 執行緒是和i/o繫結
最大的工作執行緒個數 >= i/o
並行個數
(3) 根據實驗/
基準設定
3.3 查詢系統資訊
typedef struct _system_info system_info;
4. win32 完成埠
4.1 什麼是iocp
是乙個win32
機制,方便於帶有控制併發的伺服器的併發執行。
4.2 iocp做什麼
(1) 乙個win32
核心物件。
(2) 有用於windows nt
和 後面的執行。
(3) 幫助維持重複使用的記憶體池。
刪除執行緒建立/
終結負擔
(4) 分配執行緒,控制併發
最小化的執行緒上下文切換
(5) 優化執行緒排程
提高cpu
和記憶體緩衝的命中率
4.3 基本步驟
4.4 建立iocp
埠和關聯裝置
4.5 iocp內部結構
(1) 等待執行緒採用lifo
排程,減少了執行緒上下文的切換。只要
i/o請求完成的夠慢,使乙個執行緒能夠處理他們,系統就始終喚醒同乙個執行緒。
(2) 當乙個裝置的非同步i/o
請求完成時,系統檢查是否有關聯了完成埠。如果是,那麼系統就想該裝置的完成埠
i/o完成佇列加入完成的
i/o請求。
(3) iocp是乙個核心物件,它的值和
i/o完成佇列的位址指標是相同的。
4.6 i/o完成佇列
(1) 當有乙個非同步i/o
完成時,核心將檢查是否該裝置已經關聯了某個
iocp
。如果是,則乙個完成資料報將被新增到完成佇列中。
(2) 獲取完成i/o請求
(3) 人工投遞i/o
請求包
5. 執行緒管理
5.1 執行緒狀態型別
5.2 執行緒狀態轉換
6. 基於i/o
的並行伺服器
6.1 程式流程圖
Activity Intent深入解析
學習android sdk有段時間了,對activity intent的學習與使用都比較了解。第一次完整的學習activity intent後,我就感覺這似乎與windows com技術有些似曾相識的感覺,寫了一篇將activity 與 com 做了比較,但是一直感覺意猶未盡,前幾天在程式設計師雜誌...
HTTP 深入解析
1.cookie 儲存在客戶端 cookie 的類別 cookie 的屬性 了解 cookie 的應用場景 同源http請求 攜帶cookie 原生ajax請求方式 xhr.withcredentials true 支援跨域傳送cookies xhr.send jquery的ajax的post方法請...
volatitle深入解析
今天來介紹一下volatitle volatitle是乙個確保共享變數能夠被準確和一致地更新的關鍵字 保證可見性 只能對變數使用 在對有volatile修飾符修飾的共享變數進行寫操作時,彙編 回多一條lock字首的指令。該指令有如下兩個作用 將當前快取行的資料回寫到記憶體中 使其他cpu裡快取了該記...