select和epoll的前世今生

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select和epoll的前世今生相关的知识,希望对你有一定的参考价值。

参考技术A

#2022有你相伴#

了解IO多路复用应该对epoll和select不陌生吧。

首先,select是有缺陷的,就是当事件发生(调用select)的时候,都需要在用户态和内核态之间拷贝fd数组,要知道用户态和内核态之间进行内存的拷贝是非常昂贵的,如果有上万级别的并发网络需要处理的时候,服务器根本处理不来。

这时候,Linux内核的开发者应该算是简单又粗暴的增加了一个内核调用,就是epoll了,有时候简单粗暴的东西还是能提高效率的。

先来看select接口

select是用来等待fd状态的改变,核心就是定义一组fds,如果fds中的某一个fd的状态改变(比如变得可读、可写、或者异常等),select就会从等待中返回。

可以理解为这个东西必须要靠一个fd的改变才能让系统调用去等待,先别思维跳跃,我们一步一步的分析下去,它的手段我觉得肯定是让这个系统调用等在一个等待队列wait_queue上,在不需要执行任务的时候,我们就让任务进程休眠,直到条件改变时,我们再唤醒它。

通俗的说就是:你是餐饮店里唯一的一个的服务员,当店里没有顾客或者有顾客但是没有请求的时候,你处于空闲状态,就可以做点自己的事情(比如玩玩手机),当有顾客来有需求的时候你再过去服务。

如果店里来了10个顾客,有10个顾客(10个fd)都需要监控处理,哪个顾客有请求就要立即去处理,我们先抛开内核是怎么实现的,这时候能想到有两种办法:

招10个服务员对老板来说是需要成本的,所以创建10个线程也是需要成本的。

如果你有两个核,那么创建10个线程毫无意义,大家都知道线程是有时间片的,如果某一个fd的改变去处理只处理到一半,这时候这个线程的时间片用完了,就会切换到另一个线程执行,这个切换不仅增加了成本,而且毫无意义。

还不如只创建两个线程,每个线程只处理一组fds中的一半,处理完一个请求,再去处理另一个请求。不过如果是在用户态是做不了这件事的,只有调度器去搞定。这样你就只能等待在多个fd上,哪个fd请求,就去处理哪一个,处理完再去看看有没有下一个fd需要请求。

然而,如果随着fd的数量的不断增加,效率就会变得越来越低。

总之,对于select,应该没有什么好办法了,应该只能做到这样了,如果你觉得可能某一天,select实现了更高效的算法呢?

我觉得应该不会的,select接口已经那样了。我们只能接受select这个接口的缺陷,明明知道会带来限制,我们就知道去规避这个缺陷,知道什么情况下使用它。

再来看看epoll接口:

从接口看,和select接口几乎差不多的,区别主要是select主要是线性遍历fd数组去找就绪的fd,而epoll是把就绪的fd(epollfd)放在一个链表里,不需要遍历全部fd,这样就减少了不少开销。

我们来简单想一下:把原来select的大部分接口封装在epoll上,其实不是很难,epoll需要调用epoll_create创建epollfd,那么我们改成select自动创建epollfd,然后调用epoll_ctl把数组的fds设置进去,然后调用epoll_wait就可以了。

当然我只是简单想一下而已,初衷是想告诉大家:

再从内核的角度我们简单想一下:一开始应该会想到epoll和select应该是复用同一个内核的吧。实际上,它们都是独立的,一个在fs/select.c中实现,一个在fs/eventpoll.c中实现。

整体来看,select和epoll本质是一个东西,epoll有一个比较明显的改进是增加了两个对文件描述符的操作的模式: 水平触发 (LT:level trigger)和 边缘触发 (ET:edge trigger)。

现在,对于select和epoll就会形成一种理解: epoll是对select的升级,在fds比较多的情况下,优先考虑使用epoll。

当我们分析epoll和select的时候,我们不能直接跳跃到内核看是怎么实现的,应该看它的整个逻辑来分析,脑子里要形成一些疑问,就比如select已经存在的缺陷是什么?但是又有什么好处?epoll为什么改进?改进了是不更好了?还有没有值得优化的地方?通过整个分析理解下来就能更加了解epoll和select。

你也可以继续阅读 点击 以下文章,下面是我推荐给大家的几篇文章:

1.《竟然把通信协议讲的如此通俗?》

2.《彻底明白Linux硬链接和软链接》

3.《浅析Makefile、make、cmake》

4.《常见硬件通信(SPI、I2C、CAN、USB、UART)协议介绍》

云计算的前世今生

云计算的前世今生

云计算已经成为全球ICT(信息通讯技术,Information Communication Technology)产业界公认的发展重点。各国政府积极通过政策引导、资金投入等方式加快本国云计算的战略布局和产业发展。

一、云计算定义

  • 早期简单定义:云计算是指任何能够通过有线或无线网络提供计算和存储服务(如SaaS/XaaS,托管与非托管方式)的设备和系统。
  • Gartner咨询公司定义:云计算是一种计算方式,利用Internet技术和大规模的IT计算能力,以“服务”的形式提供给外部客户。
  • 美国国家标准和技术研究院(National Institute of Standards and Technology,NIST)2009年定义:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用、服务等)并提高其可用性的模式,这些资源来自于一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。此外NIST还提出云计算模式的五个关键功能、3种服务交付模式、4种部署方式
  • IBM定义:云计算是一种计算模式,在这种模式中,应用、数据和IT资源以服务的方式通过网络提供给用户使用;云计算也是一种基础架构管理的方法论,大量的计算资源组成IT资源池,用于动态创建高度虚拟化的资源供用户使用。

云计算核心:可以自我维护和管理的虚拟计算资源,通过是一些大型服务器集群。

二、云计算发展背景

云计算提出和发展有赖于之前的IT技术,例如:网格计算、效用计算、面向服务的架构SOA、Web2.0、软件、服务等。

云计算的12种驱动力:虚拟化、分布式计算、自治系统技术、网格计算、效用计算、宽带网、Web2.0、SOA、开源软件、Web应用框架、浏览器的发展、服务品质协议(Service Level Agreement,SLA)

20世纪90年代,第一次云计算尝试是Oracle创始人Larry Ellison在1996年创立的Network Computer公司,开发生产网络计算机,当时旨在与比尔盖茨的微软进行竞争。当时整体条件不够成熟,该公司不得不放弃原有业务。第二次云计算尝试是从互联网服务提供商发展而来的应用服务提供商。应用服务提供商在远程主机上部署、治理、维护应用程序,并通过广域网向远端客户提供软件计算能力,例如:Exodus曾是应用服务提供商,最终倒闭;Netscape创始人的Loud Cloud最终转向电信软件业务。

三、云计算的特点及分类

1.云计算特点

NIST提出云计算五个基本特征

  • (1)按需分配的自助服务
  • (2)宽带网络访问
  • (3)资源池话
  • (4)快速回弹
  • (5)可评测的服务

云计算优势

  • (1)基于虚拟化技术快速部署资源或获取服务,云计算支持用户在任何位置、使用各种终端获取能力超强的服务
  • (2)减少用户终端的处理负担
  • (3)降低用户对于IT专业知识的依赖

2.云计算分类

云计算包括:私有云,公有云,社区云,混合云

在这里插入图片描述

(1)私有云:云设施为一家单独的组织独享,组织内部可能有多个消费者。此类云可以由组织或第三方,或者两者的联合体所拥有、管理、运行。

(2)公有云:云设施向公共开放使用。

(3)社区云:由一个特性的社区所独享,该社区由一群有公共考量的组织组成。

(4)混合云:云设施是一个上述两种或多种不同云设施的混合体。这类云中云分别保持独立,但借助于标准的或者私有的技术,云中的数据和应用程序可以在其间迁移[在不同云之间做负载均很,形成云爆裂]

四、云计算和网格计算

网格计算

网格计算反映的是一种理念框架,而不是指一个物理上存在的资源。网格所采用的的方法是:利用位于分散管理域内的资源完成计算任务。

网格技术可以被看做是互联网框架的扩展,目的是为了创建一个更为通用的资源共享环境。

网格计算有两个目标

  • 1.解决对于任何单一的超级计算机来说,任然是一个大的难以解决的问题,同时保持解决多个较小问题的灵活性。这样,网格计算就提供了一个多用户环境。
  • 2.更好的利用可用计算力,银河大型计算练习的断断续续的需求

网格分为两类

  • 1.外部网格(external grids):网格计算对分布在世界各地的、非盈利性质的研究机构颇具吸引力,进而造就了美国国家超级计算机应用中心计算生物学网格。
  • 2.内部网格(internal grids):网格计算对那些需要解决复杂计算问题的商业公司有着非同一般的吸引力,其目标是将企业内部的计算能力最大化。

云计算和网格计算的关系

云计算主要解决计算力和存储空间的集中共享使用问题;网格计算主要解决分布在不同机构的各种信息资源的共享问题。提出两者终将融为一体,并将云计算的未来定义为云格

  • 1.从平台统一角度看,目前云计算还没有统一的标准,不同厂商的解决方案不同、互不兼容,而网格技术就是为了解决跨平台、跨系统、跨地域的异构资源动态集成与共享的,国际网格界已经形成统一的标准体系并成功应用。
  • 2.从计算角度看,云计算管理的是由PC和服务器构成的廉价计算资源池,主要针对松耦合型的数据处理应用,对于不容易分解成众多相互独立子任务的紧耦合型计算任务,采用云计算模式来处理效率很低,因为节点之间存在频繁的通信;网格技术能够集成分布在不同机构的高性能计算机,它们比较擅长处理紧耦合型应用,而有许多应用都属于紧耦合应用,如数值天气预报、汽车模拟碰撞试验、高楼受力分析等。这类应用并不是云计算所擅长的。
  • 3.从数据角度看,云计算主要管理和分析商业数据;网格技术已经集成了海量的科学数据,如物种基因数据、天文观测数据等。目前Amazon在不断征集供公众共享使用的数据集,包括人类基因数据、化学数据等,说明云计算对这些数据的需求,同时反映这种征集的方法过于原始。
  • 4.从资源集成角度,要使用云计算,就必须将各种数据、系统、应用集中到云计算数据中心,而很多现有信息系统要改变运行模式、迁移到云计算平台上的难度和成本是很高的。网格技术可以在现有资源上实现继承,达到“物理分散、逻辑集中”。
  • 5.信息安全角度,许多用户担心将自己宝贵的数据托管到云计算中心,就相当于丧失了对数据的绝对控制权,存在被第三方窥看、非法利用或丢失的可能,从而不敢采用云计算技术;而在网格环境中,数据可以仍然保存在原来的数据中心,仍然由其所有者管控,但对外界提供数据访问服务,是一种“可以用,但不能全部拿走”的模式,不会丧失数据的所有权,但数据资源的使用范围扩大了、利用率提高了。由于数据源头分别由不同所有者控制,他们可以决定每一种数据是否共享和在什么范围共享,较之将所有数据都放进云计算数据中心进行共享更有利于避免敏感数据的扩散。

五、云计算与物联网、移动互联网

物理网

物联网(the Internet of Things)即物物相连的互联网。物联网通过把大量分散的射频识别(RFID)、传感器、GPS.激光扫描器等设备装备到电网、铁路、桥梁、隧道、公路等上,通过互联网连接起来,进而运行特定的程序,把感知的信息通过互联网传输到指定的处理设备上,进行智能化处理。

  • 物联网四个关键技术:RFID、传感器、智能技术、纳米技术
  • 物联网三种基本应用模式:对象的智能标签、环境监测、对象跟踪
  • 物联网四大组成部分:感应识别、网络传输、管理服务、综合应用。

智慧地球

IBM推动的“智慧地球", 即云计算+物联网,IBM智慧地球的核心是以一种更智慧的方法通过利用新代信息技术来改变政府、 公司和人们相互交互的方式,以使提高交互的明确性、效率、灵活性和响应速度.如今信息基础架构与高度整合的基础设施的完美结合,使得政府、企业和市民可以做出更明智的决策。智慧方法具体有以下三个特征,更透彻的感知、更全面的互联互通、更深人的智能化。

IBM在中国提出了六大领域的智慧行动方案,包括智慧电力,智慧医疗,智慧城市,智慧交通,智慧供应链,智慧银行业

六、云计算的全球影响

目前,云计算的快速发展已经和正在给全球带来巨大影响,主要体现在以下几方面。

  • 1.云计算深远地影响了IT产业的架构活动运行模式。高性能计算机、高端的处理器、服务器及存储器市场将被大量低成本、低能耗、高性价比的云计算硬件市场所挤占;传统的互联网信息中心,将被成本低一个数量级的云计算数据中心所取代;多数软件将以服务形式呈现,在“云”里运行:呼叫中心、网络会议中心、智能监控中心、数据交换中心、视频监控中心和销售管理中心将趋向集中于云计算设施以大幅提高性价比。云计算与网格计算融为一体,实现云计算平台之间的互操作和资源共享,实现紧耦合高性能科学计算与松耦合高吞吐量商业计算的融合,使互联网上的主要计算设施融为一个有机整体。
  • 2.云计算意昧着大变革,其价值在于转变业务模式和商业模式。以呼叫中心为例,传统呼叫中心强调本地资源,通过流程化、标准化和规模化,核心解决呼叫中心的服务效率问题。而基于云计算的呼叫中心不仅解决效率问题,更强调效果,其核心价值在于整合地域资源、外包资源、专家资源、产业链上下游资源甚至移动终端资源等多种企业的经营资源,随时随地为客户服务。这些服务已经超出了传统呼叫中心的范畴,这正是基于云计算的大商业应用。
  • 3.云计算最大的魅力并不在于技术本身,而在于它可以为企业创造出更大的发展机遇。云计算既有技术属性,又有商业属性,它的最大价值并不仅仅是节省了大量的社会资源,而是创造了更多新的经济增长点。云计算不仅可以为大数据的存储、 处理提供云服务平台, 还可以通过计算的力量全面分析数据,输出有实际价值的信息,全面帮助人们提升工作和生活效率,为企业和社会公共服务。根据麦肯锡公布的数据估算,到2025年,新型颠覆性技术将对全球经济的价值贡献均超过15万亿美元,其中云计算在1.7万亿6.2万亿美元之间,可令生产力提高15%20%。

美国

美国作为云计算的发源地,目前在全球范围来看,美国是云计算市场发展最快、规模最大的国家。

美国历届政府始终都将促进IT技术创新和产业发展作为基本国策。近些年,美国政府制定了了一系列关于云计算的扶植政策,主要体现在以下几个方面:统战略计划、 明确云计算产品服务标准,加强基础设施建设,制定标准、鼓励创新,加大政府采购,积极培育市场,构建云计算生态系统,推动产业链协调发展。

2009年9月,美国政府宣布了一项长期的云计算政策。在2009年年底,美国国防部与思普达成合作,帮助美国国防部建立庞大的云计算基础设施。白宫更是在2010年预算申请文件中将云计算列为促进美国政府技术基础设施的重要技术。

2011年2月8日,联邦首席信息官(CIO)颁布了联邦政府云战略(Federal Cloud Computing Strategy)。该战略旨在解决美国联邦政府电子政务基础设施使用率低、资源需求分散、系统重复建设严重、工程建设难于管理以及建设周期过长等问题,以提高政府的公信力。美国联邦政府认为云计算可以优化政府服务的提供方式,改善上述问题。在资源有限的情况下,通过云计算技术能够极大地帮助政府机构快速提供高度可靠的创新服务。

2011年美国联邦政府首席信息官维韦克.孔德劳(Vivek Kundra)签署发布《联邦云计算策略》白皮书,包括云计算定义、云计算转移IT基本构架、云计算改变公共信息部门等方面内容。此外,白皮书还指出了云计算迁移过程中的决策步骤,分别是选择迁入云服务、有效部署云服务以及管理服务而不是管理资产。

2014年,美国国家标准与技术研究所(NIST)发布了《美国政府云计算技术路线图》,该路线图聚焦战略和战术目标,充分利用了政府、工业界、学术界以及标准开发组织等各界的优势和资源,以支持联邦政府加速发展云计算的想法。最终版的《美国政府云计算技术路线图》文件包含了卷一和卷二两个部分。

从美国云计算未来的发展看,白宫力图将云计算作为一种面向未来的主流商业模式进行打造,通过改变政府对IT服务的认识出发,从IT作为一种生产资源的投资转向一种可以实施定制的商品及服务,用新思维统合部门之间的管理资源,制定完整的云战略路线图,发挥效率优先、灵活应对、鼓励创新等手段,重点关注安全、服务、市场特征、政府支持度以及IT的生命周期,协助企业开发云计算商业案例库,同时提出了联邦数据中心整合决议
(FDCCI),整合联邦政府分散的数据中心环境,加速云计算商业及公共应用的步伐。

中国

中国政府近年来高度重视对云计算的发展。《国家“十二五”规划纲要)和《国务院关于加快培育和发展战略性新兴产业的决定》(商称“决定”)均把云计算列为重点发展的战略性新兴产业。为了配合与落实国务院的《决定》,2010年10月,国家发展和改革委员会与工业和信息化部等联合下发《关于做好云计算服务创新发展试点示范工作的通知》,确定北京、上海、杭州、深圳和无锡五座城市先行开展云计算服务创新发展试点示范工作,具体内容如下。
①针对政府、大中小企业和个人等不同用户需求,研究推进SaaS (软件即服务)、PasS (平台即服务)和LaaS (基础设施即服务)等服务模式创新发展。可选择若干信息服务骨干企业作为试点企业,建设云计算中心(平台),面向全国开展相关服务。

②以信息服务骨干企业牵头、产学研用联合方式,加强虚拟化技术、分布式存储技术、海量数据管理技术等核心技术研发和产业化。

③组建全国性云计算产业联盟,形成云计算创新发展的合力。

④加强云计算技术标准、服务标准和有关安全管理规范的研究制定。政府云计算试点工程的落地,使得我国的云计算受到了各级政府的高度重视,纷纷制订云计算发展计划,并将其作为战略性新兴的重要组成部分。例如北京、上海、成都、佛山、重庆等地发布了地方云计算战略规划。如上海市发布“云海计划”:北京市启动“祥云工程”,目标是到2015年北京市在云计算服务领域形成500亿元产业规模,由此带动云计算产业链形成2000亿元产值;成都制定了云计算应用与产业发展“十二五”规划纲要,提出到2015年将建成云服务、基础软硬件设备生产和云终端产品制造三大产业集群,产业规模达到3000亿元;深圳“十二五”规划中计划建设“智慧深圳”等。地方政府通过为当地云计算服务提供税收、土地、资源等多方面政策支持,鼓励发展云计算。北京、上海、山东、江苏等省、市,以及深圳、杭州、成都、天津、济南、南京等城市成立了地方云计算联盟或协会,组织当地重点企业联合进行云计算服务、政策等方面的探索,如北京的“中关村产业联盟”、成都“成都云计算产业联盟”等

2015年1月30日,国务院发布了《关于促进云计算创新发展培有信息产业新业态的意见》。《意见》指出:到2017年,云计算在重点领域的应用得到深化,产业链条基本健全:形成若干具有较强创新能力的公共云计算骨干服务企业:云计算系统集成能力显著提升:云计算技术接近国际先进水平,云计算标准体系基本建立:云计算数据中心区域布局初步优化:初步建立适应云计算发展需求的信息安全监管制度和标准规范体系等;利用公共云计算服务资源开展百项云计算和大数据应用示范工程;政府自建数据中心数量减少5%以上。

到2020年,云计算应用基本普及,云计算服务能力达到国际先进水平,掌握云计算关键技术,形成若干具有较强国际竞争力的云计算骨干企业。云计算信息安全监管体系和法规体系健全。大数据挖掘分析能力显著提升。云计算成为我国信息化重要形态和建设网络强国的重要支撑,推动经济社会各领域信息化水平大幅提高。

计算应用基本普及,云计算服务能力达到国际先进水平,掌握云计算关键技术,形成若干具有较强国际竞争力的云计算骨干企业。云计算信息安全监管体系和法规体系健全。大数据挖掘分析能力显著提升。云计算成为我国信息化重要形态和建设网络强国的重要支撑,推动经济社会各领域信息化水平大幅提高。

参考:云计算概论,汤兵勇

以上是关于select和epoll的前世今生的主要内容,如果未能解决你的问题,请参考以下文章

云计算的前世今生

webRTC前世今生

Python-装饰器上下五千年和前世今生

数据仓库的前世今生

Lambda的前世今生

原创 | 函数 scanf 的前世今生