1.相应韶光(Response Time)

相应韶光:系统对要求做出相应的韶光。
例如系统处理一个HTTP要求须要200ms,这个200ms便是系统的相应韶光

2.吞吐量(Throughput)

php多线程与并发阿里P8架构师谈高并发与多线程的关系差别高并发的技巧计划 Python

吞吐量:单位韶光内处理的要求数量。

3.每秒查询率QPS(Query Per Second)

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

4.并发用户数

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

高并发和多线程的关系和差异

“高并发和多线程”总是被一起提起,给人觉得两者彷佛相等,实则 高并发 ≠ 多线程

1.多线程

多线程是java的特性,由于现在cpu都是多核多线程的,可以同时实行几个任务,为了提高jvm的实行效率,java供应了这种多线程的机制,以增强数据处理效率。
多线程对应的是cpu,高并发对应的是访问要求,可以用单线程处理所有访问要求,也可以用多线程同时处理访问要求。

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

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

总之,多线程即可以这么理解:多线程是处理高并发的一种编程方法,即并发须要用多线程实现。

2.高并发

高并发不是JAVA的专有的东西,是措辞无关的广义的,为供应更好互联网做事而提出的观点。

范例的场景,例如:12306抢火车票,天猫双十一秒杀活动等。
该情形的发生会导致系统在这段韶光内实行大量操作,例如对资源的要求,数据库的操作等。
如果高并发处理不好,不仅仅降落了用户的体验度(要求相应韶光过长),同时可能导致系统宕机,严重的乃至导致OOM非常,系统停滞事情等。

如果要想系统能够适应高并发状态,则须要从各个方面进行系统优化,包括,硬件、网络、系统架构、开拓措辞的选取、数据构造的利用、算法优化、数据库优化等……而多线程只是个中办理方法之一。

多线程并发技能

java多线程编程将会涉及到如下技能点:

1.并发编程三要素

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

2. 线程的五大状态

创建状态当用 new 操作符创建一个线程的时候就绪状态调用 start 方法,处于就绪状态的线程并不一定立时就会实行 run 方法,还须要等待CPU的调度运行状态CPU 开始调度线程,并开始实行 run 方法壅塞状态线程的实行过程中由于一些缘故原由进入壅塞状态比如:调用 sleep 方法、考试测验去得到一个锁等等​​去世亡状态run 方法实行完 或者 实行过程中碰着了一个非常

3.悲观锁与乐不雅观锁

悲观锁:每次操作都会加锁,会造成线程壅塞。
乐不雅观锁:每次操作不加锁而是假设没有冲突而去完成某项操作,如果由于冲突失落败就重试,直到成功为止,不会造成线程壅塞。

4.线程之间的协作:wait/notify/notifyAll等

5.synchronized 关键字

6.CAS

CAS全称是Compare And Swap,即比较更换,是实现并发运用到的一种技能。
操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。
如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。
否则,处理器不做任何操作。

7.线程池

如果我们利用线程的时候就去创建一个线程,虽然大略,但是存在很大的问题。
如果并发的线程数量很多,并且每个线程都是实行一个韶光很短的任务就结束了,这样频繁创建线程就会大大降落系统的效率,由于频繁创建线程和销毁线程须要韶光。
线程池通过复用可以大大减少线程频繁创建与销毁带来的性能上的损耗。

高并发技能方案:提高高并发能力

1.分布式缓存:redis、memcached等,结合CDN来办理图片文件等访问。

2.行列步队中间件:activeMQ等,办理大量的异步处理能力。

3.运用拆分:一个工程被拆分为多个工程支配,利用dubbo办理多工程之间的通信。

4.数据库垂直拆分和水平拆分(分库分表)等。

5.数据库读写分离,办理大数据的查讯问题。

6.还可以利用nosql ,例如mongoDB合营mysql组合利用。

7.还须要建立大数据访问情形下的做事降级以及限流机制等。