【并发与并行】
从题目名词开始讲。
- 并发
并发,顾名思义,一起出发;
在你吃饭的时候,来了一个电话,如果你可以先接电话,然后再继续把饭吃完,这个叫并发;
但是如果你只能等饭吃完才可以去接电话,叫非并发(串行)。
所以,并发指的是处理多任务的能力,当你只能一件事情一件事情串行执行任务的时候,就是不支持并发的,当你可以多件事情一起执行的时候(轮替或者其他方式),就是支持并发的。
- 并行
还是举上面那个例子,当你吃饭的时候,来了一个电话,你边吃饭边接电话,这叫并行;
并行指的就是同时运行;支持并行的基础就是多线程。
【同步和异步】
同步和异步的概念一般用于方法。
- 同步
当一个方法开始执行,必须等这个方法执行结束,才可以往下执行,我们叫做同步。
同步主要用于上下有递进关系的代码,特点是有序,串行执行,逻辑简单,但是执行效率较低。
- 异步
当一个方法开始执行,我们不必等这个方法执行结束,直接执行后面的内容,我们叫做异步。
(可以认为只是进行了一个消息的传递,调用后会立即返回)
异步在java里面主要使用线程(包括一些封装类也是如此)实现,特点是执行效率高,但是逻辑相对复杂,容易出问题。
【什么是高并发】
有果必有因,通俗来讲,多线程可以认为是高并发的一种表现形式或者解决方案,所以在讲多线程之前,我们先讲高并发。
高并发,指的是一个系统,在短时间内,收到大量操作请求的情况。
这种情况,一般而言主要发生在web系统中,比如:京东双十一,微博明星传出绯闻,12306春运抢票等等。
很容易理解的东西我们不过多的作诠释,以下几项,是高并发的常用指标:
- 响应时间(Response Time)
系统对请求作出的响应时间(一个请求从请求发出到请求结束的时间)
- 吞吐量(Throughput)
单位时间内处理的请求数量
- 每秒查询率QPS(