關于C10K問題詳解-突破單機性能是高性能網絡編程

本文轉自:https://www.jianshu.com/p/ba7fa25d3590

C10K問題由來

隨著互聯網的普及,應用的用戶群體幾何倍增長,此時服務器性能問題就出現。最初的服務器是基于進程/線程模型。新到來一個TCP連接,就需要分配一個進程。假如有C10K,就需要創建1W個進程,可想而知單機是無法承受的。那么如何突破單機性能是高性能網絡編程必須要面對的問題,進而這些局限和問題就統稱為C10K問題,最早是由Dan Kegel進行歸納和總結的,并且他也系統的分析和提出解決方案。

C10K問題的本質

C10K問題的本質上是操作系統的問題。對于Web 1.0/2.0時代的操作系統,傳統的同步阻塞I/O模型處理方式都是requests per second。當創建的進程或線程多了,數據拷貝頻繁(緩存I/O、內核將數據拷貝到用戶進程空間、阻塞,進程/線程上下文切換消耗大, 導致操作系統崩潰,這就是C10K問題的本質。

可見, 解決C10K問題的關鍵就是盡可能減少這些CPU資源消耗。

C10K問題的解決方案

從網絡編程技術的角度來說,主要思路:

  1. 每個連接分配一個獨立的線程/進程
  2. 同一個線程/進程同時處理多個連接

每個進程/線程處理一個連接

該思路最為直接,但是申請進程/線程是需要系統資源的,且系統需要管理這些進程/線程,所以會使資源占用過多,可擴展性差

每個進程/線程同時處理 多個連接(I/O多路復用)

  1. select方式:使用fd_set結構體告訴內核同時監控那些文件句柄,使用逐個排查方式去檢查是否有文件句柄就緒或者超時。該方式有以下缺點:文件句柄數量是有上線的,逐個檢查吞吐量低,每次調用都要重復初始化fd_set。
  2. poll方式:該方式主要解決了select方式的2個缺點,文件句柄上限問題(鏈表方式存儲)以及重復初始化問題(不同字段標注關注事件和發生事件),但是逐個去檢查文件句柄是否就緒的問題仍然沒有解決。
  3. epoll方式:該方式可以說是C10K問題的killer,他不去輪詢監聽所有文件句柄是否已經就緒。epoll只對發生變化的文件句柄感興趣。其工作機制是,使用"事件"的就緒通知方式,通過epoll_ctl注冊文件描述符fd,一旦該fd就緒,內核就會采用類似callback的回調機制來激活該fd, epoll_wait便可以收到通知, 并通知應用程序。而且epoll使用一個文件描述符管理多個描述符,將用戶進程的文件描述符的事件存放到內核的一個事件表中, 這樣數據只需要從內核緩存空間拷貝一次到用戶進程地址空間。而且epoll是通過內核與用戶空間共享內存方式來實現事件就緒消息傳遞的,其效率非常高。但是epoll是依賴系統的(Linux)。
  4. 異步I/O以及Windows,該方式在windows上支持很好,這里就不具體介紹啦。

參考:

  1. 構建C1000K的服務器(1) – 基礎
  2. 高性能網絡編程(二):上一個10年,著名的C10K并發連接問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455191.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據中心傳輸需求成以太網市場巨大推動力

近日,市場研究機構Infonetics作出評估稱,數據中心以太網市場將迎來全面發展的勢頭,其驅動力則在于當前數據中心以太網絡交換接口由10Gbps產品向25Gbps乃至50Gbps標準的大規模升級。 根據對2014年第三季度的市場銷售情況研究,該公司…

Gina DLL

Windows的開機密碼認證模塊一般是由Gina DLL完成的。在NT/2000中交互式的登陸支持是由WinLogon調用GINA DLL實現的,GINA DLL提供了一個交互式的界面為用戶登陸提供認證請求。1.Gina原理WinLogon會和GINA DLL進行交互,缺省是MSGINA.DLL(在System32目錄下)…

ultilize什么意思_ultilize是什么意思

1. We also ultilize the supports of NSFC for other valuable researches.我們還利用基金支持,做了其他一些有價值的科研工作。2. Recover the second segment with all due haste, ultilize any means necessary.盡快取回第二部分,使用任何必要的手段…

HTML,CSS的class與id命名規則

個人博客點這里 最重要的部分先說(命名書寫格式) 常見的格式有:連接符(search-btn)、下劃線、全小(searchbox)、小駝峰(searchBox)。 現在用得多廣泛的還是第一種使用連接符,易讀…

主打“云安全” 迅雷系帝恩思登陸新三板

ZD至頂網安全頻道 06月14日 綜合消息: 6月14日上午,帝恩思(837018)敲響了登陸新三板的鐘聲。作為帝恩思的重要股東,迅雷(NASDAQ:XNET)CEO鄒勝龍與帝恩斯董事長王宇杰、總經理許淵培等人一同參加了這一儀式。 帝恩斯是一…

UESTC 1636 夢后樓臺高鎖,酒醒簾幕低垂

題意&#xff1a;求一條路徑&#xff0c;使得這條邊連接1到n&#xff0c;求邊權值的最大值與最小值的差 題解&#xff1a;最小生成樹&#xff0c;對邊權排序&#xff0c;可以枚舉邊的最大和最小的值&#xff0c;判斷能否使得1和n連通 #include <bits/stdc.h> #define ll …

wav文件格式分析詳解

wav文件格式分析詳解 作者&#xff1a;曹京日期&#xff1a;2006年7月17日 一、綜述 WAVE文件作為多媒體中使用的聲波文件格式之一&#xff0c;它是以RIFF格式為標準的。RIFF是英文Resource Interchange File Format的縮寫&#xff0c;每個WAVE文件的頭四個字節便是“RIFF…

pg數據庫開啟遠程連接_Postgresql開啟遠程訪問的步驟全紀錄

前言安裝PostgreSQL數據庫之后&#xff0c;默認是只接受本地訪問連接。如果想在其他主機上訪問PostgreSQL數據庫服務器&#xff0c;就需要進行相應的配置。下面話不多說了&#xff0c;來一起看看詳細的介紹吧。步驟如下&#xff1a;要在Postgresql中允許遠程訪問,需要設置如下2…

Vue.js前后端分離2

個人博客點這里 內容回顧 - 過濾器 - 局部的過濾器 // 只能在當前組件內部使用 filters:function(val,a,b){// 執行過濾處理邏輯,(添油加醋的內容)return xxx; }- 全局的過濾器 // 聲明創建 在任何組件中都能使用 Vue.filter("myTime",function() {// 添油加醋的…

WORD列表縮進的文本起始點

Figure 1 Figure 2 Figure 3 編號位置以刻度尺為起點0.74厘米&#xff08;2個字符間距&#xff09;&#xff0c;文本縮進以刻度尺為起點2.96厘米&#xff08;8個字符間距&#xff09; 以上兩者相減得到的值正好特殊格式懸掛縮進的值2.22厘米 Figure 4 上圖看到&#xff0c;文本…

無人車火了 百度是如何做到的?

ZD至頂網服務器頻道 03月02日 新聞消息&#xff08;文/于澤&#xff09;&#xff1a;百度無人車可謂狠狠的吸足了大眾的眼球。一個問題逐漸出現在我們心中&#xff0c;為什么百度這樣的互聯網企業會推出無人車&#xff0c;似乎搜索引擎和無人車之間的關聯度并不是很高。 謎題的…

測繪技術設計規定最新版_測繪技術設計規定

《》是中國測繪出版社出版圖書&#xff0c;下面小編給大家介紹關于的相關資料&#xff0c;希望對您有所幫助。《》內容國家測繪地理信息局法規與行業管理司編著的《(2014)》是一本關于測繪資質管理規定和測繪資質分級標準的書。具體內容包括&#xff1a;大地測量專業標準、測繪…

各類音頻格式解析

CD格式&#xff1a;天籟之音 當今世界上音質最好的音頻格式是什么&#xff1f;當然是CD了。因此要講音頻格式&#xff0c;CD自然是打頭陣的先鋒。在大多數播放軟件的“打開文件類型”中&#xff0c;都可以看到&#xff0a;.cda格式&#xff0c;這就是CD音軌了。標準CD格式也就是…

Error: Java heap space

在chd中 的hive中執行 (select count (*)) 或者mr程序都報Error: Java heap space 4、io.sort.mb 的作用 排序所使用的內存數量。 默認值&#xff1a;100M&#xff0c;需要與mapred.child.java.opts相配 默認&#xff1a;-Xmx200m。 不能超過mapred.child.java.opt設置&…

Golang語言基礎課件

go學習pdf課件,大家可以收藏頁面以免文件丟失 原文鏈接:http://victorfengming.gitee.io/course/go/

NIO客戶端主要創建過程

NIO客戶端主要創建過程:步驟一&#xff1a;打開SocketChannel&#xff0c;綁定客戶端本地地址&#xff08;可選&#xff0c;默認系統會隨機分配一個可用的本地地址&#xff09;&#xff0c;示例代碼如下&#xff1a; SocketChannel clientChannel SocketChannel.open(); 步驟…

rank 開窗函數_over 開窗函數的的理解

over的功能&#xff1a;一、with Ta as(select 1 as Fa, a as Fbunion allselect 2 as Fa, b as Fbunion allselect 3 as Fa, c as Fbunion allselect 4 as Fa, d as Fbunion allselect 5 as Fa, e as Fb)select FB ,1.*Fa/(select sum(Fa) from Ta)from Tawith Ta as(select 1…

MP3技術白皮書-音頻格式全解析

MP3的技術雖然現在已經完全公開&#xff0c;但是&#xff0c;其具體的技術細節還是有一定的深度&#xff0c;因此此次小編對某些技術進行深度解釋&#xff0c;希望網友們笑納。 采樣率&#xff1a; 數碼音頻系統是通過將聲波波形轉換成一連串的二進制數據來再現原始聲音的&…

Docker Compose 項目

二、Docker Compose 項目compose項目簡介compose項目來源于之前的Fig項目&#xff0c;使用python代碼編寫。compose項目主要用于編排部署基于docker的應用。本身與docker&#xff0f;swarm配合度很高。Docker Compose 是 Docker 編排服務的一部分&#xff0c;可以讓用戶在其它平…

Goland安裝-工欲善其事必先利其器

?、安裝Goland開發?具 &#xff08;?&#xff09;、介紹 Goland是由JetBrains公司旨在為go開發者提供的?個符合?體?程學的新 的商業IDE。這個IDE整合了IntelliJ平臺的有關go語?的編碼輔助功能和?具集成 特點。它具有以下特點&#xff1a; 編碼輔助功能符合?體?程學…