高并发的理解和使用场景-----特意区别和多线程的关系

一,高并发的理解

   1.概念:就是短时间内遇到大量操作请求,导致站点服务器/db服务器资源被占满甚至严重时直接导致宕

   2.影响:没有做高并发预处理的系统会给用户很差的体验感;

   3.系统好坏的衡量:衡量一个系统的好坏,除了业务外,还有就是系统的吞吐量(单位时间内处理的请求数)-----QPS(每秒钟能处理的请求数)和响应时间

二,区分一下高并发和多线程的关系----曾经我也是单纯的理解高并发就是多线程,错的很离谱

    1.多线程的理解:

 多线程是java的特性,因为现在cpu都是多核多线程的,可以同时执行几个任务,为了提高jvm的执行效率,java提供了这种多线程的机制,以增强数据处理效率。

 多线程对应的是cpu,高并发对应的是访问请求,可以用单线程处理所有访问请求,也可以用多线程同时处理访问请求。

在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。

再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序

   2.多线程和高并发的关系

    要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化等…而多线程只是其中解决方法之一

   3.并发编程的几个要素

  •  原子性原子,即一个不可再被分割的颗粒。在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。
  •  有序性程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)
  •  可见性当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程能立即获取到最新的值

   4.使用多线程技术编程需要注意的几个点

       4.1 清楚一个线程的五个状态

       4.2 理解悲观锁和乐观锁 

       4.3懂线程之间的协作(wait/sleep/notify等)

       4.4 知道什么时候使用线程池

   5.高并发的场景

      一般像火车票抢票,秒杀 系统,双11或者京东618活动等这种太明显不过了,这种还是正常的业务范围,蛮好理解的,还有一种就是恶意的攻击,导致系统的某个功能近乎瘫痪,比如验证码的请求等,

      假设系统的一些架构方便的并发措施都做到位了,例如,重要系统配备了好的资源(高质量服务器),同时使用集群方式提供服务,增加了redis集群配置等,最后需要处理的就是底层数据库那块了,

     不然前面那么多请求都吃下来了,到了底层掉链子跟不上那也不行:

     在此,个人理解为并发无非就是并发读和并发写,并发读还好,一般使用缓存就可以搞定,并发写技术就比较多了;

     一般我们都知道 并发时最怕的就是对共享变量的同时访问导致脏数据的产生,所以一般会加锁:对象锁(例如:syncrinized等关键字)和 分布式锁(数据库锁,redis,zookeeper)

    对象锁顾名思义就是锁住当前对象--只能用在单服务器上,对于分布式系统或者单系统分布式部署时对共享资源的访问就必须使用分布式锁了,此时对象锁没法用了 

    像秒杀系统可以使用缓存让还有数量时都可以看到,而在开抢后得看个人运气了(网络等原因),此时使用乐观锁(共享锁)就搞定了嘛

    像银行的消费后更新银行卡余额,使用悲观锁(排斥锁)就可以

    具体想搞清楚分布式锁的请看下面这个链接:https://www.cnblogs.com/toutou/archive/2018/09/24/9554974.html

     

   6.高并发的技术解决方案

      

    

     a.分布式缓存:redis、memcached等,

     b.系统采用水平方向扩展,尽量使用集群来分散处理多请求。

     c.应用拆分:一个工程被拆分为多个工程部署,利用dubbo解决多工程之间的通信。

     d.数据库分库分表等。

     e .数据库读写分离,解决大数据的查询问题。

     f.还可以利用nosql ,例如mongoDB配合mysql组合使用。

    g.还需要建立大数据访问情况下的服务降级以及限流机制等。

    h.消息队列中间件:activeMQ等,解决大量消息的异步处理能力。

    .............

    

    

 

转载于:https://www.cnblogs.com/feichen-66/p/11207847.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

async 和 await 原来这么简单

前言 前端同学们可能都知道 async 和 await 的使用,当被面试官问到 async 和 await 的是什么?或者说一说你对 async、await 的理解?如果我们还是仅仅去阐述我是如何使用的就显得格外的苍白无力。今天博主就来带大家进一步认识我们的 async 和…

研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...

#---------------------------------指针-----------------------------------# #include <iostream> int main(){ using namespace std; /* 指针引入 */ int updates 6; //声明一个变量 int* p_updates; //声明一个指针p_updates,该指针指向一个地址 p_updates&upd…

利用Windows内置工具winsat测试硬盘速度(SSD机械盘对比)

利用Windows内置工具winsat测试硬盘速度&#xff08;SSD&机械盘对比&#xff09; 以下是红色内容是在命令行运行&#xff1a; C:\Users\Administrator>winsat diskWindows 系统评估工具> 正在运行: 功能枚举 > 运行时间 00:00:00.00> 正在运行: 存储评估 -seq …

我为何在 CSDN 乐在其中

文章目录写在前面成为博主究竟能得到什么&#xff1f;内在提升耀眼名片丰富眼界提升知名度博客》变现写在最后写在前面 各位伙伴大家好&#xff0c;我是几何心凉&#xff0c;一位不是很大的也不是很小的博主&#xff0c;今天想要跟大家去聊一些比较实在的内容&#xff1b;大家能…

EFLinq查询

1、无参数查询var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2、有参查询var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes where idID ",new SqlParameter("ID",id)).ToL…

实现div可以调整高度(div实现resize)

实现div可以调整高度&#xff08;div实现resize&#xff09; 一、div 实现resize&#xff08;类似textarea&#xff09; 代码如下&#xff1a; <!DOCTYPE html> <html><head><title>div实现textarea效果</title><style>#textarea {height:…

10分钟设置免费远程桌面

文章目录前言远程桌面设置教程启动Amazon Lightsail实例配置远程桌面启动远程桌面使用远程桌面前言 “你见过洛杉矶凌晨4点的样子吗&#xff1f;” 没有也没关系&#xff0c;你可以轻松配置一台位于洛杉矶的免费远程桌面。 利用Amazon全球可用区&#xff0c;甚至可以在世界各…

树莓派-开启spi

1. sudo raspi-config #进入树莓派配置页 2. #进入每5项&#xff0c;进入启用spi即可 转载于:https://www.cnblogs.com/lobin/p/10459076.html

Lucene全文检索过程

1. 索引过程&#xff1a; 1) 有一系列被索引文件 2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。 3) 经过索引创建形成词典和反向索引表。 4) 通过索引存储将索引写入硬盘。 2. 搜索过程&#xff1a; 1) 用户输入查询语句。 2) 对查询语句经过语法分析和语言分析得到…

tcpdump 用法

原文链接 本文原文来自&#xff1a; A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic TCPDUMP 简介 TCPDUMP 在一个界面中既提供了强大的功能又简单易用&#xff0c;无疑已经是网络分析工具中的老大。 本教程将介绍如何以各种方式隔离流量&#xff1a;从IP&am…

网络端

1.synchronized 同步锁 同步方法: 成员|静态 简单,但是锁的范围一般可能较大,效率低 同步块 类的class:相当于锁了类的整个信息|所有对象 this:锁当前对象,锁了这个对象的所有资源 资源:一般锁不变的内容--对象地址 锁的范围太大效率低,锁的范围太小可能锁不住 锁一定要锁不变的…

BZOJ2690: 字符串游戏(平衡树动态维护Dfs序)

Description 给定N个仅有a~z组成的字符串ai,每个字符串都有一个权值vi,有M次操作&#xff0c;操作分三种&#xff1a;Cv x v:把第x个字符串的权值修改为vCs x a:把第x个字符串修改成aQ:求出当前的最大权字符串集合&#xff0c;使得这个集合中的字符串经过重新排列后满足除最后一…

【第一趴】初探uni-app(uni-app发行者、uni-app推出背景、为什么选择uni-app)

文章目录写在前面DCloud当下跨平台开发存在的问题为什么选择uni-app写在最后写在前面 聚沙成塔——每天进步一点点&#xff0c;大家好我是几何心凉&#xff0c;不难发现越来越多的前端招聘JD中都加入了uni-app 这一项&#xff0c;它也已经成为前端开发者不可或缺的一项技能了&…

Rocket - tilelink - Atomics

https://mp.weixin.qq.com/s/TSwKL_qm-b-0e8x7r--hhg 简单介绍Atomics中数学运算、逻辑运算的实现。​​1. ioAtomics是一个硬件模块&#xff0c;他继承自Modules&#xff1a;​​IO端口定义如下&#xff1a;​​其中&#xff1a;a. write: 是否写操作&#xff1b;b. a&#xf…

Spark streaming java代码

待做转载于:https://www.cnblogs.com/drjava/p/10464388.html

【第二趴】uni-app开发工具(手把手带你安装HBuilderX、搭建第一个多端项目初体验)

文章目录 写在前面HBuilderXHBuilderX 优势HBuilderX 安装uni-app 初体验写在最后写在前面 聚沙成塔——每天进步一点点,大家好我是几何心凉,不难发现越来越多的前端招聘JD中都加入了uni-app 这一项,它也已经成为前端开发者不可或缺的一项技能了,所以凉哥为大家推出 聚沙成…

“勤学会”火爆来袭

文章目录勤学会是什么&#xff1f;勤学会存在的意义是什么强大的助学团勤学会如何帮助大家学习参与勤学会能得什么奖品专属C计划加入勤学会勤学会是什么&#xff1f; 他来了他来了&#xff0c;其实两个月前勤学会的概念产品就已经出现了&#xff0c;只不过因为了 1024 大型活动…

LeetCode -- 204. Count Primes

题目标签 HashTab&#xff08;哈希表&#xff09; 题意及思路 题意&#xff1a;略 思路&#xff1a;有关素数的题目我所知道有两种做法。一种是最基本的isPrime算法&#xff0c;关键点在循环判断时&#xff0c;上限为Math.sqrt(n) &#xff08;求n是否为素数&#xff09;。另外…

如何寻找无序数组中的第K大元素?

如何寻找无序数组中的第K大元素&#xff1f; 有这样一个算法题&#xff1a;有一个无序数组&#xff0c;要求找出数组中的第K大元素。比如给定的无序数组如下所示&#xff1a; 如果k6&#xff0c;也就是要寻找第6大的元素&#xff0c;很显然&#xff0c;数组中第一大元素是24&am…

【第三趴】uni-app页面搭建与路由配置(了解工程目录结构、学会搭建页面、配置路由并成功运行)

文章目录 写在前面工程结构新页面呈现写在最后本期推荐写在前面 聚沙成塔——每天进步一点点,大家好我是几何心凉,不难发现越来越多的前端招聘JD中都加入了uni-app 这一项,它也已经成为前端开发者不可或缺的一项技能了,所以凉哥为大家推出 聚沙成塔【45天玩转uni-app】专栏…