精华内容
下载资源
问答
  • 最近在视频学习Java中并发与高并发的一些相关课程。...这门课程基础知识主要是分几大块来讲解的:并发与高并发相关概念、CPU多级缓存,缓存一致性、Java内存模型JMM规定,抽象结构同步操作与规则、并发优...

    最近在视频学习Java中并发与高并发的一些相关课程。目前已经学完了这门课程的基础知识部分,为了加深对知识的印象和理解,所以想写篇文章来加深下,也希望能带给读者们一些帮助。因为本人的知识和能力有限,有些知识点理解的不到位,希望大家多多指点和提出建议。

    这门课程基础知识主要是分几大块来讲解的:并发与高并发相关概念、CPU多级缓存,缓存一致性、Java内存模型JMM规定,抽象结构同步操作与规则、并发优势和风险、并发模拟工具展示,以下我会对这几个点来进行阐述。

     

    并发

    说到并发可能好多人见词知意了,百度百科对其也有解释,但是要进行理解性的思考。所谓并发就是:同时拥有两个或多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时「 存在 」的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中每个线程都将分配到一个处理器核上,因此可以同时运行。也就是说,并发就是多个线程操作相同的物理机中的资源,保证其线程安全,合理的利用资源。有了并发就会有「 高并发 」,可能很多人认为这两个是一种意思。但是其实是有区别的。

     

    高并发(High Concurrency)

    是现在互联网设计系统中需要考虑的一个重要因素之一,通常来说,就是通过严谨的设计来保证系统能够同时并行处理很多的请求。这就是大家常说的「 高并发 」。也就是说系统能够在某一时间段内提供很多请求,但是不会影响系统的性能。如果想设计出高可用和高性能的系统,就应该从很多的方面来考虑,例如应该从硬件、软件、编程语言的选择、网络方面的考虑、系统的整体架构、数据结构、算法的优化、数据库的优化等等多方面。这其中的每一点展开来说都要说很多的知识,就不一一展开来说。有兴趣的可以单独了解。

     

    CPU缓存一致性

    其实说实话,在学这门课程之前,我对计算机操作系统的一些底层实现逻辑是不关心的,其实这些就是基础,可能在你代码中不会涉及,但是你如果懂操作系统的一些原理,会帮助你写出更加高质量的代码。说到缓存一致性,就得先介绍计算机中的CPU和内存,因为在计算机中内存的计算效率和处理速度和CPU相比起来,差的不是一个量级,所以为了提高计算机的整体处理效率就在内存和CPU之前加了一层高级缓存(cache)用它来作为CPU和内存的一种缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了

    引入了一层高级缓存解决了处理性能上的问题,但是又引发了另一个问题。就是如何保证高级缓存、CPU寄存器(也是一种为了提高运算速度的东西)中的数据和主内存中的数据保持一致呢,这就是所谓的缓存一致性。在多核处理器的计算机当中,每个处理器有自己的高级缓存,而他们却公用一块主内存,也就是上图中的 Main Memory。在他们进行数据读写时,需要一种协议,目前作者了解到的协议大概有:MSI、MESI、MOSI及Dragon Protocol等。此外,为了能使CPU一直处在工作中,工作单元能被充分的利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化。这和Java里面的指令冲排序(Instruction Recorder)相似。

     

    Java内存模型(JMM--Java Memory Model)

    Java的内存模型可以理解为:在特定的协议下,对特定的内存和高级缓存进行读写访问的过程抽象,不同操作系统有不同的内存模型也就是过程抽象。Java虚拟机(JVM)也有自己的内存模型,也就是Java内存模型了。因为Java内存模型屏蔽了各种硬件和操作系统的差异,也就形成了大家众所周知的「 一次编写,到处运行 」。

     

    Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,后者是线程私有的,不会被共享。

    Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存(可以与前面讲的处理器的高速缓存类比),线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,线程、主内存和工作内存的交互关系如下图所示。

     

    如上图所示,可以看出来内存交互中有八步的操作:lock、Unlock、Read、 Load、 Use、 Assign、 Store、 Write其中Read和Load  Store和Write必必须按顺序执行,而没有保证必须是连续执行。另外还有Java内存模型的八项规则:

     

    • 不允许read和load、store和write操作之一单独出现
    • 不允许一个线程丢弃它的最近assign的操作,即变量在工作内存中改变了之后必须同步到主内存中。
    • 不允许一个线程无原因地(没有发生过任何assign操作)把数据从工作内存同步回主内存中。
    • 一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load或assign)的变量。即就是对一个变量实施use和store操作之前,必须先执行过了assign和load操作。
    • 一个变量在同一时刻只允许一条线程对其进行lock操作,lock和unlock必须成对出现
    • 如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值
    • 如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作;也不允许去unlock一个被其他线程锁定的变量。
    • 对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作)。

     

    并发的优势和风险

    优势

    1.速度:同时处理多个请求,响应时间较快。复杂的业务操作可以拆分为多个线程去执行加快了速度。

    2.设计:程序在某些情况下,可以更简单更高效,选择性更多

    3.资源利用:CPU可以在空闲时可进行复用,例如在等磁盘和网络IO的时候,做一些其他的事情。

    风险

    1.安全性:多个线程执行相同的程序,可能会出现线程安全的问题,也就是与实际期望不符的结果

    2.活跃性:某个操作执行不下去,可能会发生死锁和饥饿等问题。

    3.性能:线程过多,CPU频繁切换,增加了调度时间。线程过多会消耗过多的内存。

     

     

    并发模拟工具展示

     

    许多情况下,并发的场景应该都是在线上,但是为了学习和模拟高并发和并发,我们应该模拟场景,所以就出现了市面上的一些比较热门的工具:Postman JMeter Apache Bench。其中JMeter是功能最全和最常用的。具体的操作方式可在网上自行查询。当然,也可以在代码层面来模拟并发和高并发可以运用线程池和J.U.C里的相关类。

     

    总结

    目前基础知识我能想到的能总结这么多,通过写这篇文章也加深了我对知识的储备,也能让我看到自己知识不足的地方,学习有输入就要输出,希望能帮到那些热爱技术和乐于分享的人吧。当然,我之后会继续分享我所学的。谢谢支持!

     

     

    大家扫描二维码关注我的公众号,或者在微信中搜索「 技院小王」!

     

    文章部分知识参考文章:https://blog.csdn.net/u011080472/article/details/51337422

    展开全文
  • 高并发概念

    千次阅读 2018-06-28 08:57:43
    高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200...

    一、什么是高并发

    高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求


    高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPSQuery Per Second),并发用户数等。


    响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

    吞吐量:单位时间内处理的请求数量。

    QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

    并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

     

    二、如何提升系统的并发能力

    互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out

    垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:

    1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G

    2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;


    在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。

     

    不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展


    水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践,是本文重点讨论的内容。

     

    三、常见的互联网分层架构


    常见互联网分布式架构如上,分为:

    1客户端层:典型调用方是浏览器browser或者手机应用APP

    2反向代理层:系统入口,反向代理

    3站点应用层:实现核心应用逻辑,返回html或者json

    4服务层:如果实现了服务化,就有这一层

    5数据-缓存层:缓存加速访问存储

    6数据-数据库层:数据库固化数据存储

    整个系统各层次的水平扩展,又分别是如何实施的呢?

     

    四、分层水平扩展架构实践

    反向代理层的水平扩展


    反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip

    nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。

     

    站点层的水平扩展


    站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。

    web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。

     

    服务层的水平扩展


    服务层的水平扩展,是通过“服务连接池”实现的。

    站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持。

     

    数据层的水平扩展

    在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。

     

    互联网数据层常见的水平拆分方式有这么几种,以数据库为例:

    按照范围水平拆分


    每一个数据服务,存储一定范围的数据,上图为例:

    user0库,存储uid范围1-1kw

    user1库,存储uid范围1kw-2kw

    这个方案的好处是:

    1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务;

    2)数据均衡性较好;

    3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务;

    不足是:

    (1)      请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;

     

    按照哈希水平拆分


    每一个数据库,存储某个keyhash后的部分数据,上图为例:

    user0库,存储偶数uid数据

    user1库,存储奇数uid数据

    这个方案的好处是:

    1)规则简单,service只需对uid进行hash能路由到对应的存储服务;

    2)数据均衡性较好;

    3)请求均匀性较好;

    不足是:

    1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;

     

    这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同。

    通过水平拆分扩展数据库性能:

    1)每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;

    2n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;

    3)数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n);

    通过主从同步读写分离扩展数据库性能:

    1)每个服务器上存储的数据量是和总量相同;

    2n个服务器上的数据都一样,都是全集;

    3)理论上读性能扩充了n倍,写仍然是单点,写性能不变;

     

    缓存层的水平拆分和数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多,就不再展开。

     

    五、总结

    高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求

    提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。前者垂直扩展可以通过提升单机硬件性能,或者提升单机架构性能,来提高并发性,但单机性能总是有极限的,互联网分布式架构设计高并发终极解决方案还是后者:水平扩展

    互联网分层架构中,各层次水平扩展的实践又有所不同:

    1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;

    2)站点层可以通过nginx来进行水平扩展;

    3)服务层可以通过服务连接池来进行水平扩展;

    4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;

    各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。

    展开全文
  • 第7章主要介绍了高并发框架Akka的基本使用方法,并使用Ak:ka框架实现了 个简单的粒子群算法, 模拟超高并发的场景。第8章介绍了使用Eclipse进行多线程调试的方法, 并演示了通过Eclipse进行多线程调试重现ArrayList...
  • 高并发总结

    2019-03-22 16:27:35
    并发有关概念,线程,内存模型,锁的优化,jdk并发包,nio,aio等等
  • 衡量一个接口是否能够支撑高并发,我们最先想到的就是他的QPS是多少,影响QPS大小的关键因素是你的系统是否支持分布式、高并发,当提起这几三个词的时候,是不是很多人都认为分布式=高并发=多线程? 当面试官问到...

      衡量一个接口是否能够支撑高并发,我们最先想到的就是他的QPS是多少,影响QPS大小的关键因素是你的系统是否支持分布式、高并发,当提起这几三个词的时候,是不是很多人都认为分布式=高并发=多线程

      当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼?

      确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?

      实际上,他们三个总是相伴而生,但侧重点又有不同。

    1. 什么是分布式?

      分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段

      该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。

      从理念上讲,分布式的实现有两种形式:

      水平扩展:当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务;

      垂直拆分:前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理余票查询的请求,B机器处理支付的请求。

    2. 什么是高并发?

      相对于分布式来讲,高并发在解决的问题上会集中一些,其反应的是同时有多少量:比如在线直播服务,同时有上万人观看。

      高并发可以通过分布式技术去解决,将并发流量分到不同的物理服务器上。

      但除此之外,还可以有很多其他优化手段:比如使用缓存系统,将所有的,静态内容放到CDN等;还可以使用多线程技术将一台服务器的服务能力最大化。

    3. 什么是多线程?

      多线程是指从软件或者硬件上实现多个线程并发执行的技术,它更多的是解决CPU调度多个进程的问题,从而让这些进程看上去是同时执行(实际是交替运行的)。

      这几个概念中,多线程解决的问题是最明确的,手段也是比较单一的,基本上遇到的最大问题就是线程安全。

      在JAVA语言中,需要对JVM内存模型、指令重排等深入了解,才能写出一份高质量的多线程代码。

    总结一下:

    • 分布式是从物理资源的角度去将不同的机器组成一个整体对外服务,技术范围非常广且难度非常大,有了这个基础,高并发、高吞吐等系统很容易构建;
    • 高并发是从业务角度去描述系统的能力,实现高并发的手段可以采用分布式,也可以采用诸如缓存、CDN等,当然也包括多线程;
    • 多线程则聚焦于如何使用编程语言将CPU调度能力最大化。

    参考:
    https://mp.weixin.qq.com/s/NLnoej8vO8VjHCxvNcaP9Q

    展开全文
  • 多线程高并发相关基础概念

    千次阅读 2018-10-10 02:07:46
    程序是静态的概念,windows下通常指exe文件,程序也可以说是编译后的文件(.jar、.war等);操作系统打开一共应用程序,实际上是新打开了一个进程。 进程: 进程是动态的概念,是程序运行时的状态。一个程序可以有多个...

    程序、进程、线程

    程序:
             程序是静态的概念,windows下通常指exe文件,程序也可以说是编译后的文件(.jar、.war等);操作系统打开一共应用程序,实际上是新打开了一个进程。

    进程:
             进程是动态的概念,是程序运行时的状态。一个程序可以有多个进程,进程之间互不影响彼此隔离。

    线程:
             线程是进程里的一个基本任务,每个线程都有自己的功能,线程是CPU分配与调度的基本单位(即:CPU分配调度是面向于线程的;线程抢占CPU时间片)。


    并发与并行

    一台计算机可能有多个CPU。

    并发:
            多个线程抢占同一个CPU的时间片。

    并行:
             不同CPU同时执行不同的线程。

    而实际上,并行的同时往往带着并发:

    注:线程的调度单位是线程。

    注:单核(单CPU)多线程时,只存在并发;多核(多CPU)多线程时,并发与并行往往同时存在。

    注:一般的,我们所说的并发,指的是并发与并行。

    注:多线程抢占CPU时间片时,优先级越高的线程,抢占到CPU时间片的概率就越大。可以通过xxx.setPriority(x)来设
           置线程xxx的优先级x,其中x的范围是[1,10]之间的整数。1,优先级最低,10,优先级最高。优先级越高,抢
           占到CPU时间片的可能性越大(注意:优先级高只是抢占到的可能性高而已,优先级高的也并不一定能抢占到)


    同步与异步

    异步、同步可参考AJAX原理。给出两张图一看便知。

    同步:

    异步:


    临界区

    临界区用来表示一种公共资源与共享数据,可以被多个线程使用。

    注:同一时间只能有一个线程访问临界区,其余线程必须等待。


    死锁、饥饿、活锁

    死锁:
             多个线程彼此竞争相同的资源,而又不愿彼此礼让,进而出现死锁。

    注:死锁是在多线程情况下最严重的问题,在多线程对公共资源(文件、数据等)进行操作时,彼此不释放自己的资源,而
           试图去操作其他线程的资源,而形成交叉引用,就会产生死锁。

    说明死锁(示例):
           线程A需要对象x和对象y的锁,而线程B需要对象y和对象x的锁,假设线程A在获得对象x的锁时线程B获得y的锁;此时,线程A和B就同时进入的阻塞状态,等待对方线程释放自己需要对象的锁,即:此时,线程A和线程B进入死锁状态。

    解决(避免)死锁的建议:

          ◎尽量减少公共资源的引用,用完马上释放。

          ◎减少synchronized等的使用,采用副本的方式代替。

          ◎引用公共资源时,多个线程都按照用一个顺序进行引用。

    饥饿:
            某些线程在与其他线程进行CPU时间片抢占时,(由于线程优先级等问题)总是没有抢到CPU时间片,那么就会使这些线程处于饥饿状态。

    活锁:
           与死锁相反,多个线程彼此过度礼让,都不去抢占资源,进而形成线程阻塞。

    严重程度(由高到低): 死锁 -> 饥饿 -> 活锁


    线程安全

            在拥有共享数据的多条线程并发执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

    线程安全的三大特性:

            原子性:一个操作要么全部执行,且执行过程中不会被任何因素打断;要么都不执行。

            可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其余线程能够立即“看到”修改后的值。

            有序性:如果在本线程内观察,所有的操作都是有序的;如果在一个线程观察另一个线程,所有操作都是无序的。

    注:这里对有序性进行一下说明,假设现有(按语句从上到下的顺序)语句1,语句2,语句3,语句4;其中语句3的执行依赖
           于语句2;那么CPU进行重排序后,可能会排为2/3/1/4或2/3/4/1/或1/2/3/4或4/2/3/1或1/4/2/3或4/1/2/3;但是
           绝不可能把语句3排在语句2前,因为语句3的执行以来于语句2。在Java中我们可以使用关键字volatile来防止CPU
           重排序,其实我们在编写代码时并不需要主动的使用该关键字,因为JVM默认使用了该关键字来防止CPU重排序。


    Java内存模型

    注:JVM Memory是在我们真实的内存中开辟出的一块儿空间。

    注:堆是相对稳定的、静态的存储。

    注:上图只是简单说明(没列出程序计数器、本地方法栈等),在后面的JVM学习中,会再详细介绍Java内存模型。

    注:方法区与堆的关系较复杂,可认为其处于堆中,具体的在后面的JVM学习中,会再详细介绍。


    后台线程(守护线程、服务线程)

            假设当前有用户线程(非守护线程)A和守护线程B,当A线程先运行完时(包括结束A进程的操作所花费的时间运行完),B线程无论是否运行完,都会消亡。如果B先运行完,则对A不会有任何影响。

    注:守护线程一般都不会比用户线程提前结束。

    注:可通过线程对象的.setDaemon(true)方法,来将该线程设置为守护线程。

    注:如果有多个用户线程,那么当所有的用户线程都结束后,守护线程才会结束(如果守护线程不提前结束的话)。


    线程的五种状态

         ◎新生

         ◎就绪

         ◎运行

         ◎阻塞

         ◎消亡

    注:有时也可以说四种状态:新生、可运行(就绪 + 运行)、阻塞、消亡。

    给出关系图:

    线程的部分方法(更多请查阅手册):

           xxx.join();方法:其中xxx为线程名。当执行到此语句时,其它线程暂时阻塞,只有等此线程所有的都运行完后,其余线程才恢复可运行状态。

           xxx.sleep(x);方法:其中xxx为线程名,x为毫秒数。当执行到此语句时,此线程会阻塞x毫秒,然后再恢复可运行状态。

           xxx.yield();方法:其中xxx为线程名。当前线程主动交出正在运行的资源(即:主动让自己的抢占到的可能性降低了),但是并不阻塞,可以继续抢占。


    笔者将本人多线程一栏中博客涉及到的所有代码示例(Lock分开放在一个专门的项目、synchronized的代码附在该文章末尾),放在GIT上了(链接见本文末),这里先给出一个所涉及内容图:

     

    声明:本文是学习笔记,主要学习自以下视频

    ^_^ 学习视频
                 《Java多线程与并发实战视频课程》,齐毅 

    ^_^ 参考笔记
                 《程序员成长笔记(一)》,笔者JustryDeng

    ^_^ 多线程一栏所有测试示例代码,托管链接
     
                  https://github.com/JustryDeng/PublicRepository

    ^_^ 如有不当之处,欢迎指正

    ^_^ 本文已经被收录进《程序员成长笔记(三)》,笔者JustryDeng

    展开全文
  • 高并发理解及一些概念

    千次阅读 2018-10-20 15:50:35
    高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它...高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
  • 多线程与高并发基本概念

    万次阅读 2018-07-26 23:27:52
    1.同步(Synchronous)与异步(Asynchronous) 同步和异步通常形容一次方法的调用。同步方法调用开始后调用者必须等到方法调用返回才能进行后续行为。... 并发和并行都能表示两个或多个任务一起执...
  • 为什么区块链必须是高并发的?   1. 摩尔定律早已结束 目前,提高并发性是解决人类计算能力的主要方向了。但是并发的编程模型一直受到来自上下两方的压力。 2000年开始之际,人们已经意识到摩尔定律失效了。你...
  • Linux高并发概念

    2021-01-15 16:53:41
    1.2 高并发相关指标 响应时间(Response Time) 系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间 吞吐量(Throughput) 单位时间内处理的请求数量 每秒查询率QPS...
  • 高并发系统概念思想

    2018-08-30 09:23:24
    什么是高并发 高并发(High Concurrency)是互联网分布式系统架构...高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。 响应时...
  • 分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。 该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些...
  • 高并发:单位时间收到的请求数量 海量数据:海量数据存储与分析 集中式系统 集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行...
  • PHP如何应对高并发

    千次阅读 2020-06-17 10:46:59
    ​​综述:在之前的工作中,并没有接触过也没有处理过高并发,但是高并发是必须要学习的,在现在的公司没有技术leader,所以,高并发以及优化的一些问题需要自己去考虑并且解决。
  • 并发编程与高并发解决方案(一):并发编程相关基础知识 【原文链接】www.ronglexie.top 目录 基本概念 CPU多级缓存 CPU多级缓存-缓存一致性协议(MESI) MESI协议中的状态 MESI状态转换图 CPU多级缓存-乱序...
  • 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。在介绍架构...
  • 并发原则 ⽆状态 ⽆状态应⽤,便于⽔平扩展 有状态配置可通过配置中⼼实现⽆状态 实践: Disconf、Yaconf、Zookpeer、Consul、Confd、Diamond、 Xdiamond等 拆分 系统维度:按照系统功能、业务拆分,如购物⻋,结算...
  • Qt高并发

    千次阅读 2018-10-24 23:14:07
     QtConcurrent是一个命名空间,提供了用于编写并发软件的更层次的类和算法。该命名空间中有一个重要的类,QThreadPool,这是一个管理线程池的类。每个Qt应用程序都有一个QThreadPool::globalInstance()函数,它带...
  • Java高并发(一)- 并发编程的几个基本概念 Java高并发(二) - Java 内存模型与线程 Java高并发(三) - CountDownLatch、CyclicBarrier和Semaphore Java高并发(四) - Java 原子类详解 Java高并发(五) - 线程...
  • 高并发面试总结

    万次阅读 多人点赞 2018-07-07 18:28:58
    实现线程安全的思想也已经完全变了,它摒弃了Segment(分段锁)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的 HashMap 版本的思想,底层依然由数组+链表+红黑树的方式思想,但是为了...
  • 高并发常见的面试题

    万次阅读 多人点赞 2019-02-28 23:45:06
    实现线程安全的思想也已经完全变了,它摒弃了Segment(分段锁)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由数组+链表+红黑树的方式思想,但是为了做到...
  • 目录 第一章 分布式概念 ...2.1 高并发 2.1.1 通过设计保证系统可以并行处理很多请求。 应对大量流量与请求 2.1.2 高并发衡量指标 2.2 高可用 2.2.1 服务集群部署 2.2.2数据库主从+双机热备 2.3 ...
  • 什么是高并发高并发(High Concurrency)是互联网分布式系统...高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。响应时间:系统对...
  • 学习高并发你必须知道的几个重要的概念: 1. 同步(synchronous)和异步(asynchronous) 同步和异步是对方法的调用而言的: 同步调用时,会等待调用的方法完成以后才能继续执行这个方法。 异步调用的时候会瞬间的...
  • 二、高并发架构相关概念 1、QPS (每秒查询率) : 每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求) 2、PV(Page View):综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面...
  • C++-并发相关概念基础

    2021-11-06 12:48:49
    文章目录何为并发并发的两种方式并发途径(实现选择)多进程单进程中多线程比较为什么使用并发关注点分离性能何时不用并发总结 何为并发 并发是指两个或更多独立的活动同时发生,在计算机领域,并发指的是在单系统内...
  • 多线程与高并发笔记

    千次阅读 多人点赞 2020-09-13 10:14:52
    LongAdder 使用分段锁,所以效率好,在并发数量特别的时候,LongAdder最合适 6. ConcurrentHashMap的分段锁原理 分段锁就是将数据分段上锁,把锁进一步细粒度化,有助于提升并发效率。 HashTable容器在竞争激烈的...
  • 最近不少小伙伴们都在问我:高并发专题我学了不少文章了,但是如何设计一个高并发的系统我还是一脸懵逼!这个问题怎么解决呢?其实,相信不只是问我的这些小伙伴有这个困惑,就连工作(入坑)了好几年的开发人员也都...
  • 1 概念: 1.1 同步(Synchronous)和异步(Asynchronous) 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为; 异步方法调用一旦开始,方法调用就会立即返回,调用者可以继续后续的操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,920
精华内容 74,768
关键字:

高并发相关概念