当前位置: 首页 > news >正文

并发和高并发

一、并发(Concurrency)

1. 核心思想

并发指的是系统有能力同时处理多个任务。注意,这里的“同时”并不一定是物理上的同一时刻,而是指在一段时间内,多个任务都在向前推进。

2. 一个生动的比喻:咖啡馆里的一个服务员

想象一个咖啡馆,只有一个服务员(代表计算机的单个CPU核心)。

  • 场景:此时来了三位顾客,分别点了美式、拿铁和茶。
  • 并发的工作方式:这个服务员不会先做完美式再做拿铁最后做茶。他可能会:
    1. 先为美式按下咖啡机的按钮。
    2. 在咖啡机工作的同时,赶紧为拿铁蒸牛奶。
    3. 在蒸牛奶的间隙,给第三个顾客泡上茶。
    4. 最后回来完成美式和拿铁。

在这个过程中,虽然任何一个瞬间服务员只在做一件事,但在一段时间内(比如5分钟),他同时推进了三个订单的任务。 这就是并发。

3. 技术上的实现

在单核CPU时代,并发是通过时间片轮转实现的。操作系统飞快地在多个任务(进程/线程)之间进行切换,由于速度极快,用户感觉不到停顿,就像多个任务在同时进行一样。

并发的关键目的:不是为了提高速度,而是为了提高效率响应能力,避免因为一个任务等待(如等待IO)而让整个系统卡死。


二、高并发(High Concurrency)

1. 核心思想

高并发指的是系统在极短的时间内(比如1秒钟)同时处理大量的访问请求。它是“并发”的一种特定场景,强调的不是处理方式,而是巨大的任务数量

2. 继续用比喻:星巴克的中央厨房

现在想象“双十一”的淘宝,或者春运抢票的12306。

  • 场景:这不是一个有三杯饮料的咖啡馆,而是一个高峰期每分钟要出几千杯饮料的超级中央厨房。
  • 高并发的工作方式:一个服务员绝对忙不过来。这就需要:
    • 多个服务员(代表多个CPU核心/多台服务器,即分布式集群)。
    • 高度分工:有人专做浓缩,有人专蒸牛奶,有人专点单(代表服务拆分、微服务)。
    • 高效的协作机制:如何传递订单和原料才不会混乱(代表消息队列、负载均衡)。
    • 强大的原料供应:保证牛奶和咖啡豆不会瞬间用完(代表数据库性能、缓存)。
    • 有序的排队系统:当订单多到厨房处理不过来时,如何让顾客排队而不流失(代表流量控制、限流、降级)。
3. 技术上的挑战与解决方案

高并发系统设计是一个复杂的工程,主要解决以下问题:

  1. 计算能力:使用多台服务器(集群)而不是单台服务器来处理请求。
  2. 流量分配:使用负载均衡器(如Nginx)将海量请求合理地分发给后端不同的服务器。
  3. 数据读写
    • 缓存:将高频读取的数据(如商品信息)放在内存(如Redis)中,极大减少直接访问数据库的压力。
    • 数据库优化:读写分离、分库分表,将一个巨大的数据库拆分成多个小的。
  4. 异步处理:对于非即时需要的操作(如下单后发短信通知),将其放入消息队列(如Kafka, RabbitMQ)中慢慢处理,快速响应用户。
  5. 应用架构:采用微服务架构,将一个大应用拆分成多个小而自治的服务,便于独立扩展和维护。
  6. 保护系统:实施限流、熔断、降级策略,在流量远超系统负荷时,选择性地拒绝部分请求或关闭次要功能,保护核心系统不崩溃。

总结与对比

特性并发 (Concurrency)高并发 (High Concurrency)
关注点处理方式:系统如何交替执行多个任务任务数量:系统在单位时间内处理的请求量极大
核心目标提高效率、保证响应性、充分利用资源保证系统在巨大流量下的稳定性、可用性、扩展性
实现层面更多是编程层面的概念(多线程、协程)更多是系统架构层面的概念(集群、缓存、负载均衡)
比喻一个服务员同时照看多个订单一整个团队和流水线应对海量订单的冲击
关系高并发是并发的一种极端场景。实现高并发系统,需要很好地运用并发编程技术。

简单来说:

  • 并发是一种能力,是“怎么做事”的方法。
  • 高并发是一种场景,是“要做的事太多”的压力。

程序员写多线程代码是解决并发问题。
架构师设计分布式系统是解决高并发问题。


文章转载自:

http://ewC6Rs9R.nyhtf.cn
http://y1pWVZC1.nyhtf.cn
http://DZlnjmbs.nyhtf.cn
http://K9vptpJE.nyhtf.cn
http://tg5w1UfM.nyhtf.cn
http://8zOJ4rYY.nyhtf.cn
http://hasLYk40.nyhtf.cn
http://Aq8QV9mC.nyhtf.cn
http://VZHB17iY.nyhtf.cn
http://4uXRgVzi.nyhtf.cn
http://UVbpXkRC.nyhtf.cn
http://Otbqs7XA.nyhtf.cn
http://8QAFKoZT.nyhtf.cn
http://FgmVHspX.nyhtf.cn
http://Q78EPfWk.nyhtf.cn
http://VrFXF8QP.nyhtf.cn
http://MsqC3IQk.nyhtf.cn
http://bYco9vUS.nyhtf.cn
http://K1LFu7xM.nyhtf.cn
http://ElSJHSWb.nyhtf.cn
http://ASznHdve.nyhtf.cn
http://8LhvU2l2.nyhtf.cn
http://RoDnbHLl.nyhtf.cn
http://C4McGbNH.nyhtf.cn
http://rcM3Ns91.nyhtf.cn
http://0jUqaFp0.nyhtf.cn
http://5jKlp93T.nyhtf.cn
http://IggMDLim.nyhtf.cn
http://IflujM61.nyhtf.cn
http://H8VbQlXt.nyhtf.cn
http://www.dtcms.com/a/382293.html

相关文章:

  • 科技信息差(9.13)
  • 文档长期不更新导致知识过时如何解决
  • Python学习-day9 字典Dictionary
  • Ubuntu22.04更换阿里镜像源,ubuntu更换源
  • 仓颉编程语言青少年基础教程:Struct(结构)类型
  • C语言数据结构实战:从零构建一个高性能的顺序栈
  • 数据链路层总结
  • Linux线程:基于环形队列的生产消费模型
  • 【Ambari监控】高版本 DataGrip 无法使用 Phoenix 驱动
  • 1.架构师——大纲
  • 粒子群算法模型深度解析与实战应用
  • JDK 新特性
  • 数据库可视化面板下载
  • 深入解析:preload与prefetch的区别及最佳实践
  • 【层面一】C#语言基础和核心语法-01(类型系统/面向对象/异常处理)
  • Python核心技术开发指南(061)——初始化方法__init__
  • 用 Go 采集服务器资源指标:从原理到实践
  • MySQL-day2_02
  • 基于springboot+vue开发的会议预约管理系统【50906】
  • 【Ubuntu】sudo apt update出现E :仓库***没有Release文件
  • JavaWeb--day3--AjaxElement路由打包部署
  • 阿里云国际代理:怎么保障数据库在凭据变更过程中的安全与稳定?
  • 关于子空间流形的认识
  • SQL注入漏洞手动测试详细过程
  • 【Linux】gcc/g++工具篇
  • libxl写到xls
  • 关键点(c++,Linux)
  • IO进程——进程引入、进程函数接口
  • Java 面向对象设计的六大原则
  • 今日分享:C++ deque与priority_queue