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

在这里插入图片描述

文章目录

  • 多线程
    • (多线程问题的)三大源头
    • 两个主要问题
    • 两大解决方案
  • 高并发问题解决方案


对多线程和高并发相关问题整理了一个简单的提纲。
通过这个提纲,足够引出对并发编程中大部分问题的讨论~

多线程

(多线程问题的)三大源头

线程并发执行带来的原子性问题。这是最主要的问题,无论是单核场景下的时间片轮转(线程切换),还是多核场景下的并行,都可能会出现多线程对同一个共享变量进行并发访问的情况,而这个访问过程可能涉及到多个步骤,并不是原子性的,这将产生竞态条件或导致数据竞争。

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

大多数情况不需要担心这个问题,但如果出现了不可见的情况(比如"咦,这个修改怎么没生效?"),要想到可能是这个原因导致的。
在C/C++/Java中,可以使用volatile关键字来修饰变量,使内存中的共享变量一旦修改完毕,就会立即将该变量刷新回主内存。

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


两个主要问题

(线程切换带来的原子性问题,会最终表现为以下两个问题)

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

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


两大解决方案

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

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

数据分片(actor模型):将数据分为多个部分,由不同的线程独立处理。具体思路是根据数据所有者划分出数据主体(即actor),每个actor在自己对应的线程中处理/访问自己的数据。


高并发问题解决方案

  • 多线程:充分利用CPU性能,提高系统的性能和吞吐量。
  • 负载均衡: 使用负载均衡器将请求分发到多个服务器上,以平衡系统的负载。
  • 分布式架构:将系统拆分为多个独立的服务,采用分布式架构,可以减轻单一服务的压力,并提高整体的并发处理能力。
  • 缓存:利用缓存技术来减轻数据库和其他服务的压力。将频繁访问的数据缓存起来,以减少对底层存储系统的访问。
  • 异步处理:可以利用消息队列对消息进行异步解耦,避免大量消息等待响应。
  • 其它:水平扩展、数据库优化等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455677.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去梯之言:招聘行业运作的秘密——之找到一份工作

一、前言 招聘行业是一个水很深的行当。不过,尽管它很复杂,了解该行业的工作方式还是很重要的,这样你就可以在这片波涛汹涌的水域中平安航行,获得自己心仪的软件开发职位。反过来,如果你对这个波谲云诡的行业一无所知&…

接口测试(四)jmeter——文件上传

一、文件上传(注:示例仅供参考模仿) 1. 添加【HTTP信息头管理器】,配置【HTTP信息头管理器】如下: 2. 添加【HTTP请求默认值】,配置【HTTP请求默认值】如下: 3. 添加【HTTP请求】&#xff0…

window7虚拟机VMware与主机共享文件

文件管理器》计算机网络右键》属性》高级共享设置——全部启用 新建文件夹》右键》属性》共享》选择可以共享的用户——我这里选的是所有用户 点击高级共享》权限》保存设置——设置文件权限 文件管理器》计算机网络》右键》属性》————查看虚拟机计算机名称 主机访问 主机…

GIS常见前端开发框架

#1024程序员节|征文# 伴随GIS的发展,陆续出现了众多开源地图框架,这些地图框架与众多行业应用融合,极大地拓展了GIS的生命力,这里介绍几个常见的GIS前端开发框架,排名不分先后。 1.Leaflet https://leafl…

android 微信分享报:签名不对,请检查签名是否与开发平台签名一致的解决

1、微信分享会检查签名与开发平台的签名是否一致: 基本信息 | 微信开放文档 官方文档 下载签名工具,并且,将包名输入,然后点击生成,得到这个一串字符串。 2、到开发平台中:微信开放平台 登录,…

Vue2、Element中实现Enter模拟Tab,实现切换下一个框的效果

目录 📃前序 👉开发历程 💻实际代码 📽实现效果图 前序 在几乎所有的浏览器中,都具备通过 Tab 键来切换焦点的功能。然而,有些用户提出了强烈要求,希望能够增加通过 Enter 键…

批量合并PDF 文件的 5 大解决方案

PDF 可以将一个、两个、三个甚至更多的记录封装在一起,以显示完整的信息和用于逻辑和交互式结构化的不同元素。由于 PDF 可以提出多层结构,因此当用户知道如何最大化这种格式时,将所有文件组织到其中非常有效。正如许多经验丰富的用户和 PDF …

selenium案例——爬取哔哩哔哩排行榜

案例需求: 1.使用selenium自动化爬虫爬取哔哩哔哩排行榜中舞蹈类的数据(包括视频标题、up主、播放量和评论量) 2.利用bs4进行数据解析和提取 3.将爬取的数据保存在本地json文件中 4.保存在excel文件中 分析: 1.请求url地址&…

03 springboot-国际化

Spring Boot 提供了很好的国际化支持,可以轻松地实现中英文国际化。 项目创建,及其springboot系列相关知识点详见:springboot系列 springboot系列,最近持续更新中,如需要请关注 如果你觉得我分享的内容或者我的努力对…

2024年软件设计师中级(软考中级)详细笔记【11】知识产权基础知识(分值2~3分)

目录 前言第11章 知识产权基础知识【2-3分】11.1 标准化基础知识11.2 知识产权基础知识11.2.2 计算机软件著作权11.2.3 计算机软件的商业秘密权11.2.4 专利权概述习题 结语 前言 在备考软件设计师中级考试的过程中,我遇到了些许挑战,也收获了宝贵的经验…

基于django的个人相册日记管理系统

你是否还在为毕业设计苦思冥想,不知道怎么选择一个合适又实用的技术项目?今天给大家介绍一款功能全面的Django项目——个人相册日记管理系统,堪称毕业设计的完美选择! 首先,这不是简单的相册或日记本,而是…

苍穹外卖05

redis 1. 启动redis .\redis-server.exe redis.windows.conf 2. 连接redis到客户端(这里我们使用ARDM图形化工具) 新建连接 一旦建立好后就永久直接可用(和mysql一个道理) 连接成功界面

【华为HCIP实战课程十八】OSPF的外部路由类型,网络工程师

一、外部路由类型: 上节讲的外部路由类型,无关乎COST大小,OSPF外部路由类型1优先于外部路由类型2 二、转发地址实验拓扑 我们再SW3/R5/R6三台设备运行RIP,SW3即运行RIP又运行OSPF SW3配置rip [SW3-rip-1]ver 2 [SW3-rip-1]network 10.0.0.0 AR5去掉ospf配置和AR6配置rip…

win10中mysql数据库binlog恢复

win10中mysql数据库binlog恢复 昨天有朋友江湖救急,说测试库里的表不小心删除更新了数据。这里也复习下binlog数据恢复,当然需要一定的条件:首先mysql开启binlog,然后每天需要备份对应的数据库 1 单库单表准备 在恢复数据前&am…

使用Python和Matplotlib模拟3D海浪动画

使用Python和Matplotlib模拟3D海浪动画 在计算机图形学和动画领域,模拟逼真的海洋表面一直是一个具有挑战性的问题。本文将介绍如何使用Python的Matplotlib库和Gerstner波浪模型,创建一个动态的3D海浪动画。通过叠加多个波浪,我们可以生成复…

vim的使用方法

常见的命令可参考: Linux vi/vim | 菜鸟教程​www.runoob.com/linux/linux-vim.html​编辑https://link.zhihu.com/?targethttps%3A//www.runoob.com/linux/linux-vim.html 1. vim的工作模式 vi/vim 共分为三种模式,命令模式、编辑输入模式和末行&am…

高薪、高含金量、高性价比的“三高”证书——PMP证书

24年感觉什么都不好做,经济大环境也不太好,工作也卷,裁员降薪,为什么有的人没有危机,不降反增了呢?古语云往往越是危机的时候,越是机会多的时候,今天分享一个高薪、高含金量、高性 如…

关于写“查看IT设备详细信息”接口的理解

这两个星期一直在做关于IT资产管理相关的内容。这个内容大概就建立三张表,然后对三张表进行操作。一般情况下,对一张表也就那么几种操作:增删改查,导入导出。这里我说了6个操作,那就代表要写6个接口。这6个接口就是最常…

[Linux关键词]内建命令

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

Qt 二进制文件的读写

Qt 二进制文件的读写 开发工具:VS2013 QT5.8.0 实例功能概述 1、新建项目“sample7_2binFile” 完成以上步骤后,生成以下文件: 2、界面设计 如何添加资源文件: 鼠标双击“***.qrc”文件 弹出以下界面: 点击 “Add F…