高并发知识总结

一、概念
1、 并发:同一时间段内,几个程序同时在一个处理器上运行。
2、 高并发:同一时间段内,大量的程序同时在一个处理器上运行。如网站访问量非常大,服务器接收大量的请求。

二、相关概念
1、同步与异步
同步与异步区别在于消息通知的方式,也就是调用结果的方式。
(1) 同步:一个同步调用发出后,调用者要一直等待调用的结果,才能进行后续的执行。如执行完一个函数或方法后,一直等待返回消息,这时程序处于阻塞状态。
(2) 异步:一个异步调用发出后,调用者不能立即得到调用的结果。如执行完函数或方法后,不必阻塞性地等待返回消息,只需委托一个异步过程,当消息返回,触发异步过程。异步获取结果的方式:
1) 主动获取异步调用的结果。
2) 被调用者通过callback返回结果给调用者。
(3) 同步是单线程,异步是多线程。

2、阻塞与非阻塞
阻塞与非阻塞区别在于等待返回消息时候的行为。
(1) 阻塞是调用发出后,进程或线程被挂起,直到消息返回,才被激活。
(2) 非阻塞调用发出后,进程或线程不会被挂起,可执行其他操作。

三、解决思路
1、处理高并发的三种思路
(1)提高单机服务器配置
(2)增加服务器数量
(3)应用层利用缓存减少IO次数,提高并发访问处理速度(如redis缓存)
1)单例缓存原理:将数据保存在内存中,如Map<String,Object>的应用缓存。
不会被改变的数据:先将数据读取到单例缓存,再之后的操作,只需读取缓存中的数据,不需要读取数据库的数据。
其他的数据:首次读取数据,读取后放入缓存,下次优先读取缓存中数据;首次修改数据,先修改后读取,对这两个操作进行synchronized加锁防止数据混乱。
2)redis缓存原理:redis缓存是数据库的一种,但是又区别于数据库,需要java应用配合一起做缓存处理,redis的数据放在内存中,做持久化保存。和单例缓存区别在于:其他的数据时,首次修改数据,先读取数据库数据,接着修改缓存中的数据,定时同步缓存中的数据到数据库。

2、悲观锁和乐观锁
(1)悲观锁指的是外界对数据修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。悲观并发控制实际上是"先取锁再访问"的保守策略,为数据处理的安全提供了保证。如synchronized关键字的实现是悲观锁。
(2)乐观锁指的是假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。实现数据版本有两种方式:
1)使用版本号version,
2)使用时间戳timestamp(时间戳精度)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值