精华内容
下载资源
问答
  • 并发定义
    千次阅读
    2019-09-02 21:58:08

    并发进程

    1 程序执行的顺序性

    1.1 程序执行顺序性

    程序执行的顺序性包括两个定义:程序内部的顺序性和程序外部的顺序性

    内部:程序内部的顺序性是指单线程进程执行时呈现程序内部的顺序性

    外部:程序外部的顺序性是指多个进程之间的顺序执行关系,这人写进程在时间上按照次序严格有效的执行,完成一个作业级的任务。

    2 程序执行的并发性

    2.1 程序并发性的含义

    进程的并发性是指一组进程在执行时间上是重叠的,即一个进程执行的第一条指令是在另一条指令结束前开始的。

    并发的实质是一个处理器在几个进程之间的多路复用

    2.2 并发程序设计

    把一个程序编制成若干个可同时执行的程序模块的方法

    如果这些模块属于同一个进程(说明这个程序是一个单线程,这个单线程通过多个线程分别实现这些模块),在进程内部执行,则称为并发多线程程序设计

    如果模块属于不同的进程(说明这个程序是通过多个进程实现不同的功能模块),则称为并发多进程程序设计

    2.3 并发进程分类

    并发进程之间的关系分为两类:无关的和交互的

    无关的并发进程:一组并发进程分别在不同的变量集合上操作

    交互的并发进程:一组并发进程共享某些变量

    并发进程的无关性是进程的执行与实践无关的一个充分条件,又称为Bernstein条件。相关定义可以参考下方链接。

    https://baike.baidu.com/item/Bernstein%E6%9D%A1%E4%BB%B6/5452747?fr=aladdin

    大概意思是用这个Bernstein条件用来确定那些进程是可以并发的。

    3 与时间有关的错误

    对于一组交互并发的进程,若执行的相对速度无法相互控制,则会出现与时间有关的错误,与时间有关的错误有两种表现形式:结果不唯一和永远等待

    3.1 结果不唯一

    购机票问题,可能会出现同一张票卖给两个乘客的情况,正确的做法是执行购买操作时只能一先一后不能同时执行。

    3.2 永远等待

    借书还书问题,合作进程之间等待、唤醒之类的同步信号发送次序颠倒时

    4 进程的交互

    4.1 进程之间的竞争关系

    竞争关系时由于并发进程共用一套计算机系统资源引起的

    死锁:一组已经获得部分资源的进程等待获得其他进程所占用的资源,最终该组进程陷入死锁僵局

    解决方式:进程互斥–若干进程要使用同一共享资源时,最多只允许一个进程使用

    饥饿:一个进程由于其他进程总是优于它而被无限期拖延

    解决方式:FCFS(先来先服务)策略

    更多相关内容
  • 并发基本概念

    千次阅读 2020-10-20 11:37:08
    先了解些并发的基本概念。 程序 ​ 程序 是数据和指令的有序集合,本身无意义,就是一个静态的概念。 ​ 进程 是执行程序的一个运行过程,操作系统的资源分配,是动态概念。 ​ 线程 是程序执行过程中的确切操作的...

    先了解些并发的基本概念。

    程序

    ​ 程序 是数据和指令的有序集合,本身无意义,就是一个静态的概念。
    ​ 进程 是执行程序的一个运行过程,操作系统的资源分配,是动态概念。
    ​ 线程 是程序执行过程中的确切操作的执行对象。

    线程

    • 启动一个程序就会启动一个进程(Process),

    • 一个进程内包含1个到多个线程(Thread)(必有一个main线程,还可能有其他守护线程daemon),

    • main线程是主线程,程序的入口,用于执行整个程序。

    • 一个线程内包含多个指令(线程是cpu的调度和执行单位),

    • cpu是接受线程,处理指令的地方,

    • 一个cpu一次只能处理一个线程任务,

    • 线程需要获取cpu时间片才能被cpu处理,

    • 时间片很短,windows下约为15ms,


    并发&并行

    参照物为cpu

    并发 指单个cpu同时处理多个线程任务,cpu在反复切换任务线程,实际还是串行化的;

    并行 指多个cpu同时处理多个线程任务,cpu可以同时处理不同的任务,异步处理;


    并发条件

    第一,是否有共享变量
    第二,是否多线程环境
    第三,是否多个线程更新共享变量
    

    一句话:多个线程操作同一个对象;
    

    多线程执行

    在这里插入图片描述

    展开全文
  • JAVA做的进程并发[定义].pdf
  • 全局变量引起的并发问题【高并发、多线程】 背景 最近采用RabbitMQ做核心系统 团车 缴费解耦功能,消费端应用采用了SpringBoot2.1+Redis+RabbitMQ+jdbctemplate+Oaracle架构。 此消费端应用以前 单车 缴费时未出现...

    全局变量引起的并发问题【高并发、多线程】

    背景

    最近采用RabbitMQ做核心系统 团车 缴费解耦功能,消费端应用采用了SpringBoot2.1+Redis+RabbitMQ+jdbctemplate+Oaracle架构。 此消费端应用以前 单车 缴费时未出现任何问题,从监听—>日志输出—>业务逻辑处理等一切正常。 线上业务高峰期时也没有任何问题。 但是团车缴费功能启用时,多个200笔数据同时消费时就出现了数据 篡改 情况。 问题不难,看了日志之后发现对并发处理的不够到位。

    结合着之前redis高并发多线程总结,顺便对这里也进行记录,希望帮助大家总结经验
    另外一篇文章链接: redis高并发导致读写变慢(redis多线程)

    模拟重现demo(部分代码略)

    @Bean
    public class controllerA{
        private BillingMQServiceImpl billingMQServiceimpl;
        public A(){    
            log.info("监听到billing消息队列消息:");
            billingMQServiceimpl.process(new String(body,"utf-8"),redisDateType);
        }
    }
    
    public class BillingMQServiceImpl{
        private String bizNo = "";
        private String sendBillingJson = "";
        private String resultJson = "";
        @Autowired
        private InfoToBillFeignService infoToBillFeignService;
        
        public process(String body){
            // 1. 取业务号
            bizNo = this.parseBody(body);
            // 2. 业务逻辑处理
            resultJson = this.noticSys();    
        }
    
        public String parseBody(String body) throws Exception {
            sendBillingJson = body;
    
            try {
                BillingInfoDto billingInfo = JSON.parseObject(body, BillingInfoDto.class);
                bizNo = billingInfo.getBody().getHbReceivableInfo().get(0).getCplyno();
            } catch (Exception ex) {
                log.error(ex.getMessage());
                throw ex;
            }
            log.info("billing MQ customer parse bizNo : " + bizNo);
            return bizNo;
        }
    
        @Override
        public void noticSys() {
            long startTime = System.currentTimeMillis();
            try {
                log.info(bizNo.get() + "send car-bill-cust start!");
                infoToBillFeignService.postData(sendBillingJson);
                log.info(bizNo.get() + "send car-bill-cust sucess! cost " + (System.currentTimeMillis() - startTime) + " ms.");
            } catch (Exception e) {
                log.error(bizNo.get() +  "send car-bill-cust faild, exception message : " + e.getMessage() + " ,cost " + (System.currentTimeMillis() - startTime) + " ms.");
                throw e;
            }
        }
    }
    

    代码问题分析

    以上这段代码在访问量不构成并发时不会出现什么问题。 但在并发情况下如当一个请求还未完成,另一个请求已经开始执行的情况下就会出现问题:

    • 第二个请求执行执行process()方法会将第一个请求的bizNo以及sendBillingJson变量篡改。
    • 导致第一个请求的数据没有执行业务逻辑noticSys() 中的infoToBillFeignService.postData(sendBillingJson); 所以第一笔数据就无法缴费了。

    小编这样写的目的是想要把各个环节的日志都输出到日志文件中,实现在日志平台(filebeat+kafka+Elk)进行数据监控。 为了详细跟踪每一笔数据的情况所以需要在每个环节都通过业务号bizNo进行标记。但又不想通过方法参数的方式来传递,进而设置成了全局变量。

    出现这个问题的原因

    由于系统采用SpringBoot框架,底层原理还是Springmvc其核心控制器DispatcherServlet默认为每个controller生成单一实例来处理所有用户请求,所以在这个单一实例的controller中,它的controllerA也是一个实例处理所有请求, 这样controllerA的成员变量就被所有请求共享。这样就会出现并发请求时变量内容被篡改的问题。那么出现这种问题如何解决呢?

    • 第一种方式: 全局变量改为局部变量,通过方法参数来传递。
    • 第二种方式: Jdk提供了 java.lang.ThreadLocal,它为多线程并发提供了新思路。

      当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
      ThreadLocal并不是一个Thread,而是Thread的局部变量。

    解决方案-ThreadLocal

    那么在什么地方使用ThreadLocal呢? 什么变量是请求公用的就将该变量托付给ThreadLocal来管理其线程副本, 所以我们在Service BillingMQServiceImpl中使用它。

    java.lang.ThreadLocal,它为多线程并发提供了新思路。
    当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
    ThreadLocal并不是一个Thread,而是Thread的局部变量。

    TdLocal使用语法

    初始化:ThreadLocal stringLocal = new ThreadLocal();
    赋值:stringLocal.set(value)
    取值:stringLocal.get();

    public class BillingMQServiceImpl{
        private ThreadLocal<String> sendBillingJson = new ThreadLocal<String>();
        private ThreadLocal<String> bizNo = new ThreadLocal<>();
        private ThreadLocal<String> resultJson =  new ThreadLocal<>();
        @Autowired
        private InfoToBillFeignService infoToBillFeignService;
        
        public process(String body){
            // 1. 取业务号
            bizNo.set(this.parseBody(body)) ;
            // 2. 业务逻辑处理
            resultJson.set(this.noticSys());    
        }
    
        public String parseBody(String body) throws Exception {
            sendBillingJson.set(body);
    
            try {
                BillingInfoDto billingInfo = JSON.parseObject(body, BillingInfoDto.class);
                bizNo.set(billingInfo.getBody().getHbReceivableInfo().get(0).getCplyno());
            } catch (Exception ex) {
                log.error(ex.getMessage());
                throw ex;
            }
            log.info("billing MQ customer parse bizNo : " + bizNo.get());
            return bizNo.get();
        }
    
        @Override
        public void noticSys() {
            long startTime = System.currentTimeMillis();
            try {
                log.info(bizNo.get() + "send car-bill-cust start!");
                infoToBillFeignService.postData(sendBillingJson.get());
                log.info(bizNo.get() + "send car-bill-cust sucess! cost " + (System.currentTimeMillis() - startTime) + " ms.");
            } catch (Exception e) {
                log.error(bizNo.get() +  "send car-bill-cust faild, exception message : " + e.getMessage() + " ,cost " + (System.currentTimeMillis() - startTime) + " ms.");
                throw e;
            }
        }
    }
    

    模拟验证

    此类并发篡改数据的问题,可以在开发工具中设置断点调试的方式来模拟并发。即第一次请求运行到断点时,查看bizNo, sendBillingJson内容,并且不让程序继续往下运行,同时再发起一个请求,再查看bizNo, sendBillingJson内容。 如内容是第一次请求的内容,并且让第一个请求跑完后,第二个请求到断线处的content正确时,可以确定不会出现并发问题。

    转载网上资源链接

    展开全文
  • Linux多进程并发服务器[定义].pdf
  • 并发与并行

    2021-01-20 11:50:02
    并发与并行在操作系统中的定义 1.并发 百度百科 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上...
  • 什么是高并发 ,详细讲解

    万次阅读 多人点赞 2018-08-30 13:38:58
    一、什么是高并发并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。   高并发相关常用的一些指标有响应时间(Response ...

    一、什么是高并发

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

     

    高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query 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的服务请求压力会更大;

     

    按照哈希水平拆分


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

    user0库,存储偶数uid数据

    user1库,存储奇数uid数据

    这个方案的好处是:

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

    (2)数据均衡性较好;

    (3)请求均匀性较好;

    不足是:

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

     

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

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

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

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

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

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

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

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

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

     

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

     

    五、总结

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

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

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

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

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

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

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

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

     

    末了,希望文章的思路是清晰的,希望大家对高并发的概念和实践有个系统的认识,结合上一篇《究竟啥才是互联网架构“高可用”》的分享互联网分布式架构是不是逐步的不再神秘啦?

    展开全文
  • 分别对Xie和谭的多方并发签名方案进行了分析,指出他们的方案也不满足公平性,进而正式定义了公平多方并发签名的安全模型,并基于双线性对及多方密钥协商技术重新构造了一个多方并发签名方案。分析表明,在随机预言...
  • 并发高访问量网站的运维技术[定义].pdf
  • 事务是什么,特性以及并发问题

    千次阅读 2018-08-01 19:24:04
    即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性 指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其...
  • golang-gin-mgo该项目作为可作为golang 完整web项目的模版参考使用,可以接受高并发请求,使用了gin web框架,和mgo持久层框架,mongodb非关系型数据库。程序流程讲述接收htpp请求,获取请求所有参数列表同时开启...
  • 在Golang多协程的情况下使用全局map时,如果不做线程同步,会出现panic的情况。...后来想到用传引用的方式,定义结构体,第一个参数是读写的标志,第二个参数是读成功或者写成功后的值的channel,定义的channe
  • 一、node单线程实现高并发原理 众所周知nodejs是单线程且支持高并发的脚本语言。...// 第一步:定义变量 let a = 1; // 第二步:发出指令,然后把回调函数加入异步队列(回调函数并没有执行) setTimeout(() => {
  • 由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会...
  • 多线程下载并不是并发下载线程越多越好,因为当用户开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同步的开销。 这些开销反而会导致下载速度降低。因此需要避免在代码中直接开启大量线程执行下载。 ...
  • Concurrent Series:books:深入浅出并发编程实践:并发基础、并发控制...简单定义来看,如果执行单元的逻辑控制流在时间上重叠,那它们就是并发(Concurrent)的;而从分布式一致性模型的定义来看,如果两个操作都没有在
  • Java通过对多线程的支持来在一个进程内并发执行多个线程,每个线程都并行执行不同的任务。 二、线程创建方式 一共四种方式:继承Thread类、实现Runnable接口、ExecutorService和Call(有返回Class类型值)、基于...
  • Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。 1、新建单一进程 如果我们新建少量进程,可以如下: ...
  • java并发Exchanger的使用

    2021-01-20 02:30:03
    Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同样的exchange方法。 两个线程都...
  • 首先,用UML顺序图建模并发系统需求场景,通过定义顺序图的操作语义及转换规则,将顺序图的XML描述文件自动转换为Promela程序,而后将描述系统需求的Promela程序和描述系统规约的线性时序逻辑作为模型检测器SPIN的输入,...
  • 平均并发用户数公式 C = nL/T 并发用户数峰值公式 C‘ = C + 3*根号C C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度 C’是并发用户数峰值 举例1,假设系统A,该...
  • 服务器并发量分为:1.业务并发用户数;2.最大并发访问数;3.系统用户数;4.同时在线用户数; 并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高。服务器并发量分为:1.业务并发用户数;2.最大...
  • # datatime模块用于定义时间及时间的加减操作 # MySQLdb模块用于Python2.0连接数据库,Python3.0连接数据库使用pymysql # xlwt模块是excel操作模块,用于将数据写入excel中 import datetime import MySQL
  • 文章目录并发模拟的四种方式一、Postman二、Apache Bench(AB)三、并发模拟工具JMeter四、代码模拟 并发模拟的四种方式 一、Postman Postman是一个款http请求模拟工具 首先演示一下postman最基本的使用 创建一个...
  • [超级链接:Java并发学习系列-绪论] 在Java并发编程中,如果要保证代码的安全性,则必须保证代码的原子性、可见性和有序性。 在 Java并发12:并发三特性-...可见性定义:当一个线程修改了共享变量的值,其他线程...
  • 导语:本文章记录了本人在学习Python基础之控制流程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解asyncio包的... 适合asyncio API的协程在定义体中必须使用yield from
  • 20120813_并发简介1

    2022-08-04 12:21:38
    并发简介并发定义在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但是任一个时刻点上只有一个程序在
  • 在一些场景,需要避免并发的产生,比如充值,扣费等,如果产生并发,可能金额增加结果不正确。 简单说下数据库的并发处理: 乐观并发:当用户阅读时,行不会被锁定。当用户试图更新这一行时,系统必须确定该记录...
  • 怎样才算高并发

    千次阅读 2019-02-20 16:24:58
    定义: 高并发(High Concurrency)是使用技术手段使系统可以并行处理很多请求。 关键指标: -响应时间(Response Time) -吞吐量(Throughput) -每秒查询率QPS(Query Per Second) -每秒事务处理量TPS...
  • 《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 642,778
精华内容 257,111
关键字:

并发定义