全球都在乘“云”而上,从十几亿暴涨至千亿规模的云计算究竟是什么来头?

目录

“云”从何而来?

“云”带来了哪些便利?

全球云计算发展如何?

对云计算还有怎样的期待?


2006年8月9日,在搜索引擎大会上,谷歌前CEO埃里克·施密特提出了“云计算(Cloud Computing)”的概念,不少人认为他是云计算概念的首个提出者。

还有一部分人则认为,是美国亚马逊公司提出的云计算的概念,因为早在2006年3月,亚马逊就正式推出了弹性计算云服务,在技术层面上理应将它认作真正的云计算开创者。

云计算是通过网络按需提供可动态伸缩的廉价计算服务,是与信息技术、软件、互联网相关的一种服务。

首先,云计算提供了一种按需租用的业务模式,客户需要搭建信息系统,只需要通过互联网向云计算提供商(比如华为云)租一切他想要的计算资源就可以了,而且这些资源是可以精确计费的。

总之,云计算不是一种全新的网络技术,而是一种全新的网络应用概念

云计算的核心概念就是以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。

那么,云计算是在怎样的互联网环境下诞生的?它为企业的发展带来了哪些改变?Web3时代下,人们对于云计算的未来又该有怎样的期待?

“云”从何而来?

云,是指将服务器虚拟化所形成的虚拟资源池。相比物理服务器,云更加节省资源成本、便于管理。

云是对互联网的升级,它的重点在于把互联网产品以服务的形式体现出来,把互联网软件变成服务

云计算在最基本的意义上,就是一个大型的储存服务,在计算机的概念上,就是系统计算,故称为“云”。

其实,准确来说,不管是谷歌还是亚马逊,都不是云计算的发明人。云计算概念的提出,远比我们想象中要早得多。

云计算的历史最远可追溯到1959年,英国计算机科学家Christopher Strachey在国际信息处理大会上,发表了一篇名为《大型高速计算机中的时间共享(Time Sharing in Large Fast Computer)》的学术论文。

论文中正式提出了“虚拟化”的概念,而虚拟化正是云计算基础架构的核心,是云计算发展的基础

到了1961年,美国麻省理工学院的John McCarthy教授在麻省理工学院一百周年纪念庆典上首次提出了Utility Computing(公共计算服务)的概念。

受麦卡锡观点的影响,麻省理工学院和美国国防高级研究计划局下属的信息处理技术办公室共同启动了著名的MAC项目。

MAC项目的目标,就是开发“多人可同时使用的电脑系统”。实际上,这就是“云”和“虚拟化”技术的雏形。

经过几年的发展,到了1969年,国防部高级研究计划局研究的计算机网络ARPANET诞生,ARPANET就是后来的Internet。

目前为止,云计算所依赖的三大底层技术全部出现了,用于管理物理计算资源的操作系统用于把资源分给多人,同时使用的虚拟化技术用于远程接入的互联网。

在上世纪的90年代,计算机出现了爆炸式的增长,以思科为代表的一系列公司也应势蓬勃发展。

在云计算兴起之前,对于大多数企业而言,硬件的自行采购和IDC机房租用是主流的IT基础设施构建方式。

在这一阶段,让更多的用户方便快捷地使用网络服务成为互联网发展亟待解决的问题,与此同时,一些大型公司也开始致力于开发大型计算能力的技术,为用户提供了更加强大的计算处理服务。

虽然“云计算”服务在2006年被首次提出并落地,但直到2008年,整个行业才迎来了正式的“万家灯火”。

如果多年前,有人提起“云”的概念,或许大部分人还有种“不知所云”的感觉,但如今云计算已走过十几个年头,历经多年的高速增长,随着各家云计算厂商的规模越来越大,云计算增速也进入趋稳的阶段

“云”带来了哪些便利?

随着云技术的不断成熟与采用成本的降低,目前无论是互联网企业还是传统企业、机构都开始逐步转向云服务器。

云服务器操作简单、成本低廉,同时支持多地域覆盖、宽带稳定,用户可随时随地通过任何移动设备获取访问权限,为中小企业提供了与大型企业竞争的有利机会。

除此之外,云还能为企业带来以下便利:

  • 降低部署成本

相比传统服务器的高硬件投入、人力成本投入,云服务器采用的是按需取用、按量付费的方式,企业只对需要使用的资源付费,无需承担设备采购与日常运维工作,也无需担心技术迭代、设备更新的额外成本。

  • 数据安全更加可靠

云服务器为分布式集群存储,避免了单点故障,安全性高、稳定性好;系统每周自动备份,支持用户通过快照功能自主备份和恢复数据,确保数据完整、高可用,即使其中一台服务器损坏,也不会影响数据正常读取。

  • 随时更新

云服务器是基于云计算平台搭建的,基础设施由云服务供应商负责维护,平台功能也由云服务供应商负责更新。

因此用户不必花费时间和金钱进行操作,只要网络设备运行正常,就可以随时访问应用程序的最新功能与特性。

  • 保障业务的连续性

千变万化的市场动态可能直接影响企业业务的开展,带来服务的转变与迁移问题。从技术角度来看,将业务数据从一个地方的物理服务器转移到另一个地方的物理服务器上,是一件非常困难的工作。

但在云服务器上,无论是跨区域还是全球领域进行业务转移,都会非常轻松、便捷和安全。

  • 定制化解决方案

云服务器支持弹性扩展、灵活升降,满足不同行业的实际应用需求。融合带宽、加密等网站服务,提供完整的企业云计算解决方案,实现事半功倍的效果。

  • 简化日常运维

基础IT运维对专业性和安全性的要求很高,云服务商不仅拥有专业的技术能力,还拥有更多的网络安全资源与技术工具。

使用云服务器,企业就无需为技术管理和安全能力头疼,把这些工作交给云服务商即可,还能节省大量的日常成本。

由于企业类型、业务属性与工作方式各不相同,并非所有企业都能将其优势与特点发挥尽致。但云服务器弹性计算的技术优势,的确能够帮到企业大幅度提高经营效率,降低公司费用。

全球云计算发展如何?

最初,我国云计算市场仅有十几亿增长,到目前已形成数千亿人民币规模,并且呈现稳定增长的趋势,可见行业发展十分迅速,未来市场空间更是具有巨大的潜力。

从云计算发展的基础来说,我国拥有世界上最多的网络用户和完善的网络基础设施,使得我国具备世界上最大、算力需求最多的应用场景,例如双十一购物节、支付宝集五福等等。

同时,我国在移动网络、物联网、电子游戏、网络贸易等方面也有着快速升级的创新能力,因此云计算的快速发展正推动我国科技技术的全方位迭代。

快跑式的发展速度背后,是全球云服务商竞争格局的加剧。

根据数据显示,2018年-2020年期间,我国云计算行业的市场规模增速均在30%以上,呈高速增长态势。而2021年,我国云计算市场规模已达3229亿元,增速为54.4%

但我国的云企业相对于全球其他地区的云巨头起步较晚,服务最好、起步最早的阿里云始于2009年,而其他大部分云服务厂商则开始于近几年。

放到全球范围内,以亚马逊AWS为例,从2006年开始,AWS初创小试牛刀,到如今成长为全球最大的公有云平台,已经走过了16年的风雨历程。

在基础设施层面,AWS覆盖245个国家;在行业领导力层面,AWS连续12年被Gartner评为云计算行业的领导者;而在市场占有率层面,AWS占据全球公有云市场的1/3以上。

多项卓越成绩证明AWS是全球功能最全面的云平台之一,提供超过200项功能齐全的服务,而且每年推出的新功能或服务数量飞快上涨。可以说,AWS不仅拥有数百万客户,还拥有最大且最具活力的社区

除了AWS外,科技巨头微软对云市场也充满了期待。

自2014年纳德拉上任微软CEO之后,便确立了“移动为先,云为先”的发展战略,全力投入云计算领域。在纳德拉的带领下,如今的微软已从盖茨时代的软件公司成功转型为一家云计算技术公司,如今正在积极布局游戏和元宇宙领域。

作为CEO的纳德拉第一笔收购交易是《我的世界》,而今年1月微软宣布以687亿美元天价收购暴雪,使微软成为全球收入仅次于腾讯和索尼的前三大游戏公司。

这一大手笔,再次让外界看到微软对虚拟世界和未来构建元宇宙的野心。微软表示,收购暴雪将加速公司在云领域游戏业务的增长,毕竟所有这些都将由Azure云提供支持,并推动更多的计算、存储、人工智能和工具融合发展。

也因为此,微软云已成为亚马逊在云计算领域最大的挑战者。

在疫情仍存在反复的情况下,云计算成为了科技领域爆炸式增长的业务之一,全球各地的云业务未来增长空间仍然广阔,而此时的我们正亲眼目睹云飞速发展的这一过程。

对云计算还有怎样的期待?

人们经常说,云计算的未来十年不会像过去十年一样。

凭借数万亿美元科技业务的强劲势头,云计算已经在鸿沟的另一边牢牢地扎根。各行各业都在采用云技术,许多人都在云上建立属于自己的价值层。

Java之父詹姆斯·高斯林曾说:“云计算概念的出现要远早于云计算的真正实现。在云计算发展早期,人们只是继续使用自己早已开发完成的普通应用程序,直接把它们运行在云服务商的设备上。”

“直到后来,人们开始编写出专为云环境设计的应用程序。于是,行业中才陆续涌现出云数据库等在传统集中式数据中心内看不到的技术方案。”

也许我们目睹了在当前云计算市场中,传统中心化云平台正占据市场中的主流地位,甚至像亚马逊、微软、谷歌、阿里巴巴等巨头占据了近70%的市场份额。

但这样中心化的云计算发展前景真的如人们所期待的那样吗?

在我们之前的文章中曾谈到,中心化云计算虽具有优势,但也因中心化带来诸如依赖网络、数据泄露、灵活性下降等弊端。

这些现状和隐患让行业发展蒙上一层阴影,也让去中心化云计算服务方式在人们心底里埋下了期待的种子

过去几年,数字化转型已经全面掀起浪潮,而这波转型也凸显出新的事实:我们还有更多的探索空间和机遇。

那么,结合区块链技术的Web3云又会给人们带来怎样的惊喜?新的故事篇章已经开启,想要“乘云而上”,且听我们后续一一道来。

<think>我们正在讨论Java多线程中的上下文切换概念。根据引用[1]和引用[2]的定义,上下文切换是操作系统为了实现多线程或进程并发执行而采取的一种机制。具体来说,在Java多线程环境中,上下文切换指的是CPU控制权从一个正在运行的线程转移到另一个就绪并等待CPU执行权的线程的过程。由于在一个时间段内,一个CPU核心只能执行一个线程的任务,操作系统通过时间片轮转策略为每个线程分配一段CPU执行时间,从而实现多线程的并发执行。 上下文切换的过程包括以下步骤: 1. 保存当前线程的上下文(包括程序计数器、寄存器状态、栈信息等)到内存中。 2. 加载下一个要执行线程的上下文到CPU的寄存器和程序计数器。 3. 跳转到新线程的程序计数器指向的位置继续执行。 这个过程是由操作系统的线程调度器来管理的,它会根据线程的优先级、等待时间等因素决定下一个要执行的线程。 上下文切换会带来性能开销,因为保存和加载上下文需要时间,而且切换过程中CPU无法执行有用的工作。引用[5]提到,减少上下文切换的开销是优化多线程程序性能的重要手段。 为了减少上下文切换,可以采取以下策略(参考引用[3]和引用[5]): 1. 使用线程池:避免频繁创建和销毁线程,重用已有线程。 2. 减少锁竞争:使用细粒度锁、无锁数据结构(如java.util.concurrent.atomic包中的类)或减少同步块的范围。 3. 使用最少线程原则:避免创建过多线程,根据任务类型和系统资源合理设置线程数量。 4. 使用ThreadLocal:减少线程间的数据共享,从而减少锁的使用。 5. 减少线程间通信:避免不必要的线程间通信,使用高效的通信机制(如BlockingQueue)。 6. 调整线程优先级:让关键任务的线程优先执行。 7. 使用协程:协程的切换开销比线程小。 8. 任务分解:使用Fork/Join框架分解任务,自动平衡负载。 下面是一个使用线程池来减少上下文切换的示例(参考引用[3]中的代码): ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小的线程池 ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < 100; i++) { final int taskId = i; executor.submit(() -> { System.out.println("Executing task " + taskId + " on thread " + Thread.currentThread().getName()); }); } executor.shutdown(); } } ``` 在这个例子中,我们使用了一个固定大小的线程池(10个线程)来执行100个任务。这样可以避免为每个任务都创建一个新线程,从而减少了线程创建和销毁的开销,同时也控制了线程数量,减少了上下文切换的次数。 总结:上下文切换是操作系统管理多线程并发执行的核心机制,但会带来性能开销。在Java多线程编程中,我们应该采取各种优化措施来减少不必要的上下文切换,以提高程序的性能。</think>### Java多线程中的上下文切换详解 #### 一、核心概念 **上下文切换**(Context Switch)是操作系统实现多线程并发执行的关键机制。在Java多线程环境中,它指CPU控制权从一个正在运行的线程转移到另一个就绪线程的过程[^1][^2]。由于单核CPU在任何时刻只能执行一个线程的指令,操作系统通过时间片轮转策略实现"伪并行"。 #### 二、切换过程解析 ```mermaid sequenceDiagram Thread A->>CPU: 正在执行 Scheduler->>Thread A: 时间片结束中断 Scheduler->>CPU: 保存Thread A上下文 Scheduler->>CPU: 加载Thread B上下文 CPU->>Thread B: 开始执行 ``` 1. **上下文保存**:将当前线程的寄存器状态、程序计数器、栈指针等保存到内存 2. **线程调度**:操作系统调度器选择下一个要执行的线程 3. **上下文恢复**:将新线程的上下文加载到CPU寄存器 4. **执行切换**:CPU跳转到新线程的程序计数器位置继续执行[^1] #### 三、触发条件 1. **时间片耗尽**:线程用完分配的时间片(通常10-100ms) 2. **阻塞等待**:线程等待I/O操作、锁释放或sleep() 3. **高优先级抢占**:高优先级线程抢占CPU资源 4. **系统调用**:线程主动执行yield()或wait()[^2] #### 四、性能影响与优化 **性能开销**: - 直接开销:切换过程消耗5000-10000个CPU周期 - 间接开销:缓存失效(L1/L2缓存命中率下降)[^5] **优化策略**: ```java // 示例:使用线程池控制线程数量 ExecutorService executor = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors() // 按CPU核心数设置 ); ``` 优化方法: 1. **线程池管理**:重用线程避免频繁创建销毁[^3][^5] 2. **减少锁竞争**: - 使用`ConcurrentHashMap`替代`synchronized` - 采用读写锁(`ReentrantReadWriteLock`) 3. **无锁编程**: ```java AtomicInteger counter = new AtomicInteger(); // CAS原子操作 counter.incrementAndGet(); ``` 4. **ThreadLocal应用**: ```java private static ThreadLocal<User> userContext = new ThreadLocal<>(); userContext.set(currentUser); // 线程私有存储[^4] ``` 5. **任务分解**:使用Fork/Join框架分解大任务[^5] #### 五、监控工具 1. **`jstack`**:查看线程状态和锁持有情况 ```bash jstack <PID> | grep "java.lang.Thread.State" ``` 2. **VisualVM**:图形化查看线程切换频率 3. **`pidstat`**(Linux): ```bash pidstat -w -t -p <PID> 1 # 每秒监控上下文切换 ``` > **关键指标**: > - 自愿切换(voluntary):线程主动放弃CPU(如等待I/O) > - 非自愿切换(non-voluntary):时间片耗尽被强制切换[^1] #### 六、典型场景分析 ```mermaid graph LR A[高并发请求] --> B[线程数激增] B --> C{锁竞争加剧} C -->|是| D[大量线程阻塞] D --> E[上下文切换暴涨] C -->|否| F[正常吞吐量] ``` 解决方案: 1. 使用异步NIO(如Netty)减少线程数 2. 设置合理的线程池队列大小 3. 使用`StampedLock`替代`synchronized`[^5] --- ### 总结 上下文切换是Java高并发程序的必要机制,但过度切换会导致显著性能损耗。通过控制线程数量(推荐线程数 = CPU核数 * (1 + 等待时间/计算时间))、减少锁竞争、使用无锁数据结构等手段,可有效优化多线程性能[^2][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值