Java高并发与多线程(一)-----概念

其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直没写。

但是想了想既然之前有这个想法,而且也已经好久没有写过博客了,索性还是写一写,尽量写的有意思一点。

   

另:之前的高并发&性能优化没有来得及往下写,实在是因为里面的东西太过于复杂,且最近正好换了工作,确实没有那么多时间去研究,现在写东西还是希望能多写点有用的,而不是书本照搬当笔记用,当然能力有限,写烂了,大家谅解一二,略过不看即可。

   

当然第一篇,我们依旧从概念开始,所以第一部分仍是概念。

   

【并发与并行】

从题目名词开始讲。

并发

并发,顾名思义,一起出发;

在你吃饭的时候,来了一个电话,如果你可以先接电话,然后再继续把饭吃完,这个叫并发;

但是如果你只能等饭吃完才可以去接电话,叫非并发(串行)。

所以,并发指的是处理多任务的能力,当你只能一件事情一件事情串行执行任务的时候,就是不支持并发的,当你可以多件事情一起执行的时候(轮替或者其他方式),就是支持并发的。

   

并行

还是举上面那个例子,当你吃饭的时候,来了一个电话,你边吃饭边接电话,这叫并行;

并行指的就是同时运行;支持并行的基础就是多线程。

   

【同步和异步】

同步和异步的概念一般用于方法

同步  

    当一个方法开始执行,必须等这个方法执行结束,才可以往下执行,我们叫做同步。

    同步主要用于上下有递进关系的代码,特点是有序,串行执行,逻辑简单,但是执行效率较低。

异步     

    当一个方法开始执行,我们不必等这个方法执行结束,直接执行后面的内容,我们叫做异步。

    (可以认为只是进行了一个消息的传递,调用后会立即返回)

    异步在java里面主要使用线程(包括一些封装类也是如此)实现,特点是执行效率高,但是逻辑相对复杂,容易出问题

   

【什么是高并发】

有果必有因,通俗来讲,多线程可以认为是高并发的一种表现形式或者解决方案,所以在讲多线程之前,我们先讲高并发。

高并发,指的是一个系统,在短时间内,收到大量操作请求的情况。

这种情况,一般而言主要发生在web系统中,比如:京东双十一,微博明星传出绯闻,12306春运抢票等等。

 

很容易理解的东西我们不过多的作诠释,以下几项,是高并发的常用指标:

响应时间Response Time

    系统对请求作出的响应时间(一个请求从请求发出到请求结束的时间)

吞吐量Throughput

    单位时间内处理的请求数量

每秒查询率QPSQuery Per Second

    每秒响应请求数。(其实与吞吐量指向同一个指标)

并发用户数

    同时承载正常使用系统功能的用户数量。

   

这里需要注意的是,我们经常会将高并发和多线程放在一起讲,但是他们之间并不能划等号,多线程只是高并发在应用代码层面的一种解决方案,然而一般情况下,高并发还需要系统架构,硬件设施,网络等多方面的调优协助完成。

   

【雪崩效应】

雪崩效应,原本出现在密码学中,后来引申入高并发场景的一个概念。

在密码学中,雪崩效应(Avalanche effect)指加密算法(尤其是块密码和加密散列函数)的一种理想属性。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwjyg.html