当前位置: 首页 > news >正文

【高并发】多线程和高并发提纲

文章目录

  • 三大源头
  • 两个主要问题
  • 三大解决方案


最近正在面试,对多线程和高并发相关问题整理了一个简单的提纲。
个人感觉这三大部分由底向上,足够引出对并发编程中大部分问题的讨论~

三大源头

线程切换带来的原子性问题

  • 原子操作:利用CPU提供的原子操作指令,以及编程语言对这些指令的API封装。
  • CAS算法:比较并交换,ABA问题(至少三个线程做CAS产生了错误的过程)用版本号解决。

CPU缓存带来的可见性问题:程序员要编写符合Happens Before(可见性规则)的代码保证可见性。

编译器带来的有序性问题:这种问题通常会出现在涉及到共享数据的多线程编程中,因为编译器的优化可能会导致操作的重新排序,从而破坏了程序的预期行为,例如导致可见性问题。

两个主要问题

竞态条件。强调并发执行顺序带来的结果不一致。先判断后执行竞态条件、读-操作-更新竞态条件(如i++)。

数据竞争。强调并发读写导致的未定义行为,可能会引起程序的崩溃。

三大解决方案

同步:也就是利用原子操作或者锁。缺点是大量使用锁让很多逻辑都变成同步,效率可能还不如单线程。

  • 原子操作是无锁同步机制,但仅适用于单值操作。
  • 锁适用范围广。除了常用的原生锁,分布式场景下有时还需要用到分布式锁。

数据分片:根据数据所有者划分出数据主体(Actor),每个主体在自己对应的线程中处理/访问自己的数据。

分布式架构:对逻辑进行划分,也是数据分片的一种思路,采取分布式架构,进一步提高并发量。

http://www.lryc.cn/news/185470.html

相关文章:

  • vue.js处理数组对象中某个字段是否变为两个字段
  • 从零开始的C++(补充三的内容)
  • 微信小程序通过createSelectorQuery获取元素 高度,宽度与界面距离
  • MySQL-事务
  • 自动定时删除磁盘文件的脚本(从文件日期最早的开始删)
  • 拆解CPU的基本结构和运行原理
  • Docker安装——Ubuntu (Jammy 22.04)
  • Fast DDS之Transport
  • 爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)
  • 【回顾一下Docker的基本用法】
  • 【Python】Python基础知识
  • 【计算机视觉 05】YOLO论文讲解:V1-V7
  • git全局与单仓库的密码管理
  • IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)
  • javaee SpringMVC文件上传 项目结构
  • JavaScript DOM 函数大全详解(使用最新的 JS 语法)
  • Stm32_标准库_8_ADC_光敏传感器_测量具体光照强度
  • 基于SSM的固定资产管理系统的设计与实现
  • Leetcode---364场周赛
  • 使用 Powershell 检索不理解的命令
  • 基于 FPGA 的机器博弈五子棋游戏
  • uCOSIII实时操作系统 三 移植
  • 机器学习之SGD, Batch, and Mini Batch的简单介绍
  • Windows电脑上的多开器与分布式存储系统的关系
  • 积分球可以用于什么光谱光学检测
  • 【力扣面试题】URL化
  • 计算机网络基础(二):物理层、数据链路层及网络层
  • 小白自学—网络安全(黑客技术)笔记
  • 2.2.3 vim操作合集
  • 解决 Jenkins 性能缓慢的问题~转