“粗谈”高并发

      面试官眼中的高并发

      我们面试的时候,常常被问到“有用到高并发的场景么?”“你怎么理解高并发的?”“你是怎么处理高并发的?”。每次遇到这种面试问题,我脑海中就会浮现出缓存、分表分库、读写分离、索引、前后端分离、加锁这些技术。感觉回答的很泛。这里面内容太多,有时候绕着绕着都把自己绕晕了。说白了,我也不知道面试官想听的是哪些点。我猜,面试官应该是想听到实践使用的场景吧。比如线程池,共享计数器,抢红包活动之类的。

 

      线程安全的API

      高并发的容器,也称为线程安全的容器,如HashTable、SynchronizedHashMap、ConcurretHashMap、Vectory、CopyOnWriteArrayList、CopyOnWriteSet、ThreadLocal。高并发的计数器,AutomaticLong、LongAdder。线程控制,如CountDownLantch、CycleBarrier。线程安全变量修饰符,如voilatile。锁修饰符synchronize、Lock等。每个jkd的api都是用了很经典的算法,都是一些值得一用的接口。当然了,有一些性能更佳,如LongAdder、ConcurrentHashMap。LongAdder用了分段自旋锁的方式。ConcurrentHashMap用了分段锁的方式,核心都是在高并发的情况下,减少冲突,提高效率。

    

      安全和性能

      说到高并发,当然要提到安全和性能了。首先,安全指的是在高并发的情况下,不会出现数据结果不一致的情况,不会出现死锁或死循环。一段代码在多个线程运行和一个线程运行的结果始终保持一致,我们就成为这段代码是线程安全的。jdk里面也有很多不安全的api,如ArrayList、HashMap。其中HashMap被很多人踩过坑,在jdk的api接口中HashMap.get()方法出现了死循环。根本原因就是其内部的rehash方法不是线程安全的,进入了死循环的代码段。说到性能,就有很多可以优化的了,如加缓存、加索引、读写分离、前后端分离,乐观锁。

 

      总结

      最后在文章的末尾,我想说的是有时候我们的知识很碎片化,时间也碎片化,如何才能把我们所掌握的知识系统化、条理化?这个是我要思考的问题。当然,不断的总结和写作也不失为一种办法。总结不到位,觉得有点太笼统了,达不到深度。这两天看公众号架构师之路的作者shenjian,也有被评论者说写文章越来越水了,被质疑是不是没有干货了。其实,我觉得不是没有干货了,而是没有系统化。有时候会被一些深不深、浅不浅的问题困惑,就会出现这种情况,好像苹果为什么会掉下来一样。看穿了是万有引力,看不穿就是很简单的常识问题。虽然是常识,也要思考原因本质不是?

 

   2019年6月7日修正如下:

       互联网高并发有两个办法,垂直扩展和水平扩展。

       垂直扩展包含硬件扩展,更换更好的硬盘,加大内存,加宽网络等,还包含软件应用的扩展,加缓存,

同步变异步,sql优化,多线程等。

       水平扩展是互联网的终极武器,加实例,加机子。

 

 

      

 

     

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木江南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值