
图解 | 线程的麻烦事儿,Actor能解决吗?
发布日期:2021-05-14 02:03:38
浏览次数:19
分类:精选文章
本文共 489 字,大约阅读时间需要 1 分钟。
冯诺伊曼体系中,CPU和内存是核心组件,其中内存便如一张个个格子般的存储卡,保存程序运行所需的值。单线程操作内存时,数据访问简单且不受干扰。但若采用多线程,可能发生数据覆盖的危险。因此,需要通过加锁来保护数据完整性。
但加锁并非易事,转账案例证明这一点。两个账户A和B,线程1从A转给B,若线程2也试图操作,事情会变得复杂。为了避免重复支付或错误操作,对账户采取按顺序加锁策略,避免死锁。
常人认为多线程便捷,但实际编码往往面临“一核有难,众核围观”的CPU瓶颈。优化思路是去锁化,通过更高级的并发模型来处理问题。
对账户做成黑盒处理,所有操作通过消息接口触发。每个账户独立处理消息,无需加锁。若线程冲突,该模型难以处理。因此,引入事务管理,确保操作的原子性。
但事务处理有难处:消息异步性带来的操作顺序问题,以及可能的并发修改。解决方法是运用软件事务内存(STM),通过乐观重试机制确保事务的完整性。这种方式无需锁,但仍需处理可能的冲突。
总结,多线程编程虽带来便利,但需谨防死锁和数据不一致。冯诺伊曼体系的内存管理与并发控制紧密相关,通过加锁和事务机制解决争夺与不一致问题。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月21日 19时11分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
BUU-MISC-caesar
2021-05-12
【专题2:电子工程师 之 上位机】 之 【36.事件重载】
2021-05-12
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2021-05-12
一文学会JVM常见参数设置+调优经验(JDK1.8)
2021-05-12
一文理解设计模式--命令模式(Command)
2021-05-12
VTK:可视化之RandomProbe
2021-05-12
block多队列分析 - 2. block多队列的初始化
2021-05-12
Java时间
2021-05-12
不编译只打包system或者vendor image命令
2021-05-12
MySQL
2021-05-12
The wxWindows Library Licence (WXwindows)
2021-05-12
leetcode——第203题——虚拟头结点
2021-05-12
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2021-05-12
MySQL----基础及常用命令
2021-05-12
模拟集成:MOS管的工作区小误区(简单版)
2021-05-12
flink启动(二)
2021-05-12
前端开发进阶手册.pdf
2021-05-12
软件架构设计和MESH经验之谈
2021-05-12
redis持久化分析
2021-05-12
打开word时424错误
2021-05-12