java技术---高并发与多线程

1.“高并发和多线程”总是被一起提起,感觉两者好像相等,实则 高并发 ≠ 多线程

(1)要想系统能够适应高并发状态,则需要从各个方面进行系统优化
(2)硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化等
(3)多线程只是解决高并发方法之一
(4)多线程是处理高并发的一种编程方法,即并发需要用多线程实现

2.高并发(High Concurrency)

(1)是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况
(2)主要发生在web系统集中大量访问收到大量请求(例如:12306的抢票情况;天猫双十一活动)
(3)该情况的发生会导致系统在这段时间内执行大量操作,例如对资源的请求,数据库的操作等
(4)高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机
(5)系统能够适应高并发状态,则需要从各个方面进行系统优化,提高高并发能力(用到很多技术)
   <1>分布式缓存:redis、memcached等,结合CDN来解决图片文件等访问
   <2>消息队列中间件:activeMQ等,解决大量消息的异步处理能力
   <3>应用拆分:一个工程被拆分为多个工程部署,利用dubbo解决多工程之间的通信(分布式,微服务)
   <4>数据库垂直拆分和水平拆分(分库分表)<5>数据库读写分离,解决大数据的查询问题
   <6>还可以利用nosql ,例如redis配合mysql组合使用
   <7>还需要建立大数据访问情况下的服务降级以及限流机制等
(6)多线程只是其中解决方法之一  

3.高并发相关常用的一些指标:

(1)响应时间(Response Time)
      <1>系统对请求做出响应的时间
        例如:系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间
(2)吞吐量(Throughput)
      <1>单位时间内处理的请求数量
(3)每秒查询率QPS(Query Per Second)
      <1>QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显
(4)并发用户数
      <1>同时承载正常使用系统功能的用户数量
      例如:一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。  

4.多线程并发技术将会涉及点:

(1)并发编程三要素
      <1>原子性:一个不可再被分割的颗粒(一个或多个操作要么全部执行成功要么全部执行失败)
      <2>有序性:程序执行的顺序按照代码的先后顺序执行(处理器可能会对指令进行重排序)
      <3> 可见性:当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程能立即获取到最新的值
(2)线程的五大状态
(3)悲观锁与乐观锁
      <1>悲观锁:每次操作都会加锁,会造成线程阻塞
      <2>乐观锁:每次操作不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止,不会造成线程阻塞
(4)线程之间的协作:wait/notify/notifyAll等
(5)线程同步:synchronized 关键字     
(6)CAS(Compare And Swap,即比较替换),是实现并发应用到的一种技术
    <1>操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)
    <2> 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值,否则,处理器不做任何操作
(7)线程池         
发布了143 篇原创文章 · 获赞 10 · 访问量 7559

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/103560082