山特C10K消防应急 ups 西安安装10KVA/9KW
山特C10K消防应急 ups 西安安装10KVA/9KW
C10K问题由来
互联网的基础是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多,一台服务器同时在线100个用户,在当时已经算是大型应用了,所以并不存在 C10K 的难题。互联网的爆发期是在www网站、浏览器出现后。早的互联网称之为Web1.0,大部分的使用场景是下载一个HTML页面,用户在浏览器中查看网页上的信息,这个时期也不存在C10K问题。
Web2.0时代到来后,就不同了。一方面是,互联网普及率大大提高了,用户群体几何倍增长。另一方面是,互联网不再是单纯地浏览www网页,逐渐开始进行交互,而且应用程序的逻辑也变得更复杂。从简单的表单提交,到即时通信和在线实时互动,C10K的问题才体现出来了。因为每一个用户都必须与服务器保持连接,才能进行实时数据交互。诸如Facebook这样的网站,同一时间的并发TCP连接很可能已经过亿。
————————————————
版权声明:本文为CSDN博主「爱思考的实践者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
专注高端不间断电源UPS供应链---盈创能源(深圳)有限公司。从事不间断电源UPS,产品范围从后备500VA到在线式800KVA大功率系列,及模块一体化UPS, 满足不同行业用户的需求。
本公司本著“诚信、創新、和谐、共赢”的企业精神,以提升為基础,以全方位经营为核心,全力投入产品的市场开拓、营销和售后服务,我们以销售原厂产品为发展基础,行业设备配套和综合解决方案为两翼,深入把握用户需求,开展持续的技术服务和创新,重点深耕于网络能源领域,拓展相关配套等业务。保证顾客买得放心,用得安心!
我们凭借在网络能源领域长期的技术积累和产品优势,依托于我们拥有一支在本行业销售与服务超过十年以上的团队。立足于业界前沿,不断探索、持续创新,以高效、优质、快捷地为各行各业提供产品与服务,取得了客户对我们一致的好评。经过多年的发展与沉淀, 我们的客户遍及政府、银行、医疗、商业、国防、交通、教育、电力石化、制造、建筑等各行各业提供产品与服务,并和增值商建立了战略合作伙伴关系,是行业具有竟争力和发展前景的公司之一。
让用户满意、用户放心、用户至上是我们不懈的追求。我们愿与各行各业的朋友真诚合作,携手共创美好未来。
C10K问题,本质上是操作系统的问题。对于Web1.0/2.0时代的操作系统而言, 传统的同步阻塞I/O模型都是一样的,处理的方式都是requests per second,并发10K和100的区别关键在于CPU。
创建的进程、线程多了,数据拷贝频繁(缓存I/O、内核将数据拷贝到用户进程空间、阻塞), 进程/线程上下文切换消耗大, 导致操作系统崩溃,这就是C10K问题的本质!
可见,解决C10K问题的关键就是:尽可能减少CPU等核心资源消耗,从而榨干单台服务器的性能,突破C10K问题所描述的瓶颈。
三、C10K问题的解决方案探讨
从网络编程技术的角度来说,主要思路为:
为每个连接分配一个独立的线程/进程。
同一个线程/进程同时处理多个连接(IO多路复用)。
3.1 为每个连接分配一个独立的线程/进程
这一思路为直接。但是,由于申请进程/线程会占用相当可观的系统资源,同时对于多进程/线程的管理会对系统造成压力,因此,这种方案不具备良好的可扩展性。
这一思路在服务器资源还没有富裕到足够程度的时候,是不可行的。即便资源足够富裕,效率也不够高。
此思路技术实现会使得资源占用过多,可扩展性差,在实际应用中已被抛弃。
3.2 同一个线程/进程同时处理多个连接(IO多路复用)
IO多路复用,从技术实现上,又分很多种。我们逐一来看看下述各种实现方式的优劣。
实现方式1:循环逐个处理各个连接,每个连接对应一个 socket
循环逐个处理各个连接,每个连接对应一个 socket。当所有 socket 都有数据的时候,这种方法是可行的。但是,当应用读取某个 socket 的文件数据不 ready 的时候,整个应用会阻塞在这里,等待该文件句柄ready,即使别的文件句柄 ready,也无法往下处理。
实现小结:直接循环处理多个连接。
问题归纳:任一文件句柄的不成功会阻塞住整个应用。
实现方式3:使用poll方法
poll 主要解决 select 的前两个问题:
1.通过一个 pollfd 数组,向内核传递需要关注的事件,以消除文件句柄上限。
2.使用不同字段分别标注“关注事件和发生事件”,来避免重复初始化。
实现小结:设计新的数据结构,提高使用效率。
问题归纳:逐个排查所有文件句柄状态,效率不高。
实现方式4:使用epoll方法
既然“poll逐个排查所有文件句柄状态”效率不高,很自然的,在调用返回的时候,如果只给应用提供发生了状态变化(很可能是数据 ready)的文件句柄,进行排查的效率就高很多。epoll 采用了这种设计,适用于大规模的应用场景。实验表明:当文件句柄数目超过10之后,epoll 性能将优于 select 和 poll;当文件句柄数目达到 10K 的时候,epoll 已经超过 select 和 poll 两个数量级。
实现小结:只返回状态变化的文件句柄。
问题归纳:依赖特定平台(Linux)。
因为Linux是互联网企业中使用率高的操作系统,所以Epoll就成为“C10K killer、高并发、高性能、异步非阻塞”这些技术的代名词了。FreeBSD推出了kqueue,Linux推出了epoll,Windows推出了IOCP,Solaris推出了/dev/poll。这些操作系统提供的功能,就是为了解决C10K问题。epoll技术的编程模型就是异步非阻塞回调,也可以叫做Reactor、事件驱动、事件轮循(EventLoop)。Nginx、libevent、node.js这些就是Epoll时代的产物。
山特C10K消防应急 ups 西安安装10KVA/9KW 山特C10K消防应急 ups 西安安装10KVA/9KW