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

一,高并发的理解

   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 和…

我为何在 CSDN 乐在其中

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

10分钟设置免费远程桌面

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

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

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

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

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

Rocket - tilelink - Atomics

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

“勤学会”火爆来袭

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

LeetCode -- 204. Count Primes

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

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

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

测试MongoDB的自动分片

MongoDB的自动分片: test库分片配置: db.shards.find(){ "_id" : "shard0000", "host" : "127.0.0.1:29017", "state" : 1 }{ "_id" : "shard0001", "host" : "1…

线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理内…

zookeeper watch笔记

ZK其核心原理满足CP, 实现的是最终一致性, 它只保证顺序一致性. zookeeper 基于 zxid 以及阻塞队列的方式来实现请求的顺序一致性。如果一个client连接到一个最新的 follower 上,那么它 read 读取到了最新的数据,然后 client 由于网络原因重新连接到 zoo…

单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)

1.JDK安装 在我的部署单节点kafka的博客里有相关的方法。(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的压缩包下载地址也在单节点部署的这篇博客里。 1.zookeeper集群的搭建 将zookeeper.tar.gz解压为三个目录,例…

[翻译]三张卡片帮你记住TDD的基本原则

原文地址:http://blog.briandicroce.com/2008/03/14/three-index-cards-to-easily-remember-the-essence-of-test-driven-development/ 当我浏览ObjectMentor的博客的时候,其中一篇Tim Ottinger的“TDD on Three Index Cards”引起了我的注意。他回忆了他…

凉哥核心圈程序员必备十大图书推荐(一)

写在前面 凉哥核心圈程序员必备十大图书推荐(一),各位伙伴应该一目了然了哈,没错凉哥准备出一系列图书推荐的文章,其实很多朋友在私下问凉哥除了大学的课程外自己要不要读一些技术类的书籍呢,答案当时要的…

了解大数据的特点、来源与数据呈现方式

本次作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2639 1.浏览2019春节各种大数据分析报告,例如: 这世间,再无第二个国家有能力承载如此庞大的人流量。http://www.sohu.com/a/290025769_313993春节人口迁…

强大而优雅,API 研发管理 EOLINKER 新版正式发布!

EOLINKER 于2019年3月3日正式发布新版本!该版本大幅强化各个产品的功能、着重优化了全站的用户交互体验,并且EOLINKER AMS 产品正式更名为 EOLINKER API Studio ——API 工作室,旨在为您提供API文档管理、自动化测试以及开发协作等全方位服务…

MATLAB 与 Excel 接口

MATLAB 与 Excel 接口MATLAB 与 Excel 有两种接口方式:一种是通过 MATLAB 提供的 Excel 生成器,生成220 MATLAB 实用教程DLL 组件和 VBA 代码,实现 Excel 对 MATLAB 的调用;另一种是利用 MATLAB 提供的 Excellink 插件&#xff0c…

计算 1+2!+3!+4!+...20!=?

package algs.factorial;import java.math.BigInteger;/*** Author: areful* Date: 2019/3/6* 计算 sum(n!), n1,2, ... 20*/ public class NFactorial {public static void main(String[] args) {System.out.println(calcFactorial0(3));System.out.println(calcFactorial1(3)…

区块链基础语言(三)——Go语言开发工具

一、在Windows系统安装Goland 1.1 下载 官网地址&#xff1a;https://www.jetbrains.com/go/download/#sectionwindows 1.2 安装 a. 双击“goland-2018.1.5.exe”&#xff0c;单击“运行”&#xff0c;如图1所示&#xff1b; <图1> b. 如图2所示&#xff0c;单击“next”…