Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. Java
  3. 正文
                           

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

2020-04-17 1858点热度 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、加入:互联网基础/架构交流群

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

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

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

更多文章:

  1. 笔记08 | 搜狗面试题:IO多路复用之select、poll、epoll的区别
  2. 笔记 | 5种网络IO模型
  3. 笔记 | 面试又挂了,只因问了:TCP三次握手和四次挥手
  4. 笔记 | 网络编程基础:TCP如何保证可靠性
  5. 笔记 | 面试官问我:TCP与UDP的区别
  6. 【进阶玩法】策略+责任链+组合实现合同签章
  7. 一文带你了解OpenAI Sora
  8. 超实用的IDEA插件推荐!百万级下载量
  9. 用了@Autowired注入,竟然被警告
  10. Eureka源码剖析之一:初始化-启动
标签: 原创
最后更新: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
取消回复

广告
最新 热点 推荐
最新 热点 推荐
微服务架构:必懂的6大性能维度 Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代 视频笔记-微服务架构P4:必懂5种设计模式 视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议
视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记-微服务架构P4:必懂5种设计模式Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代微服务架构:必懂的6大性能维度
重磅!AI 驱动的 Java 开发框架:Spring AI Alibaba JVM 内存分析工具 MAT 的深度讲解与实践——入门篇 ChatGLM:ChatGPT的替代方案 干货 | Elasticsearch基础但非常有用的功能之二:模板 MySQL性能优化浅析及线上案例讲解 AI辅助编码,应该怎么选? 干货!有些bug,跨年才有机会见 转转短链平台设计与实现

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (20) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

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

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2