Su的技术博客

  • 首页
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • Other
  • 工具
  • 打赏
  • 关于
  1. 首页
  2. Java
  3. 正文
                           

【原创】笔记 | 面试官问我高并发的问题:并发编程的三大挑战

2020-04-17 40点热度 0人点赞 0条评论


点击上方蓝色字关注我~


面试官:说说你对高并发的理解,并且说下并发编程中存在什么问题或挑战?

多线程理论理想趣图:

并发编程的挑战现实场景视频:

接下来我们看下并发编程存在哪些挑战吧!



1

上下文切换

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。

1)多线程不一定快:

    多线程会存在上下文切换的开销。

2)上下文切换测量:

    时长:Lmbench3

    次数:vmstat

3)减少上下文方法

    ①无锁并发编程:Hash取模,不同线程处理不同段数据。

    ②CAS算法:Atomic包

    ③少线程

    ④协程:单线程多任务

4)实战:分析线程快照

    ①线程dump

        /usr/local/java/bin/jstack 1024 > dump1024

    ②统计

        grep java.lang.Thread.State dump1024 | awk '{print $2$3$4$5}' | sort | uniq -c

    ③打开dump文件


2

死锁

避免死锁方法:

    ①避免一个线程同时获取多个锁

    ②避免一个线程在锁内同时占用多个资源,尽量每个锁占用一个资源

    ③尝试使用定时锁lock.tryLock(timeout)

    ④数据库锁,加锁和解锁必须在一个连接里



3

资源限制

1)资源限制:

    在并发编程,程序执行速度受限于计算机硬件资源或者软件资源。带宽上传下载速度、硬盘读写和cpu处理速度;数据库连接数和socket连接数等。

2)引发问题:

    资源受限,并发执行的程序仍是串行执行,程序反而慢,增加了上下文切换和资源调度的时间。

3)解决问题:

    硬件资源:考虑使用集群并行执行程序。Hadoop、自建集群。

    软件资源:考虑使用资源池将资源复用。数据库、socket连接复用。

4)资源有限下进行并发编程

    调整并发度。


应聘者:在目前互联网的某些特定场景(秒杀,营销活动等,结合自身业务经验可能更好),特别是ToC,为了让多个用户参与到系统来,得到更快的响应体验等。为了提高系统的并发度和吞吐量等要求下,多线程并发开发编程是一项必须的技能,但是在追求高并发系统的过程中,我们会面对一些问题(挑战):比如上下文的切换、死锁、受限于具体机器资源等......接着按照这三个方面将本文相关的点大致一说即可。(仅供参考)


笔记系列↓↓↓:

笔记 | Java对象探秘

笔记 | JVM内存区域结构:一计两栈一堆一区


推荐好文

1、互联网Code Review最佳实践分享

2、dubbo面试题!会这些,说明你看懂了dubbo源码

3、Kafka面试题!掌握它才说明你真正懂Kafka
4、
Netty 5.0为啥被舍弃?原因竟然是...
5、
中台之上——业务架构系列【汇总】

6、必备瑞士军刀IDEA插件,你使用了哪些

7、线上热更新代码只需3步 Arthas实战

8、Eureka源码剖析之七:架构&面试题【总结】

9、互联网工程师应该用这种姿势打印日志

10、加入:互联网基础/架构交流群

-关注搬运工来架构,与优秀的你一同进步-

如果喜欢这篇文章可以点在看哦↘

本文仅供学习!所有权归属原作者。侵删!文章来源: 搬运工来架构

标签: 原创
最后更新:2020-04-17

Cocodroid

专注Java后端,分享技术。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 推荐
最新 热点 推荐
殷浩详解DDD 第四讲:领域层设计规范 既生@Resource,何生@Autowired? Go整洁架构实践 接口优化的常见方案实战总结 QQ音乐高可用架构体系 构建一个布隆过滤器 —— Building a Bloom filter
殷浩详解DDD 第四讲:领域层设计规范Redis为什么这么快?构建一个布隆过滤器 —— Building a Bloom filterQQ音乐高可用架构体系接口优化的常见方案实战总结Go整洁架构实践
MySQL性能优化浅析及线上案例讲解 构建一个布隆过滤器 —— Building a Bloom filter 阿里云香港云服务器P0史诗级宕机事件复盘 Go整洁架构实践 订单超时怎么处理?我们用这种方案 Kafka如何选择合适的分区数,你选对了吗

@Autowired (1) @Resource (1) API网关 (1) ddd (6) DP (1) ElasticSearch (1) eureka (7) go (1) HTTP (1) IDEA (1) iOS (1) Java (8) JSR (1) QQ音乐 (1) repository (1) Spring (1) SQL优化 (1) 代理 (1) 依赖注入 (1) 同城双活 (1) 垃圾回收 (1) 定时任务 (1) 容灾 (1) 布隆过滤器 (1) 异地双活 (1) 接口优化 (1) 故障转移 (1) 数据库 (2) 整洁架构 (1) 文件网关 (1) 方案 (2) 服务续约 (1) 注册中心 (7) 流水账 (1) 流量 (1) 第五 (1) 线上案例 (1) 线上问题 (2) 缓存 (1) 缓存击穿 (1) 编译 (3) 网络 (3) 聊聊 (1) 订单 (1) 设计规范 (1) 详解 (1) 连接池 (1) 限流 (1) 领域驱动设计 (4) 高可用 (1)

COPYRIGHT © 2014-2023 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2