图解 | 线程的麻烦事儿,Actor能解决吗?
发布日期:2021-05-14 02:03:38 浏览次数:19 分类:精选文章

本文共 489 字,大约阅读时间需要 1 分钟。

冯诺伊曼体系中,CPU和内存是核心组件,其中内存便如一张个个格子般的存储卡,保存程序运行所需的值。单线程操作内存时,数据访问简单且不受干扰。但若采用多线程,可能发生数据覆盖的危险。因此,需要通过加锁来保护数据完整性。

但加锁并非易事,转账案例证明这一点。两个账户A和B,线程1从A转给B,若线程2也试图操作,事情会变得复杂。为了避免重复支付或错误操作,对账户采取按顺序加锁策略,避免死锁。

常人认为多线程便捷,但实际编码往往面临“一核有难,众核围观”的CPU瓶颈。优化思路是去锁化,通过更高级的并发模型来处理问题。

对账户做成黑盒处理,所有操作通过消息接口触发。每个账户独立处理消息,无需加锁。若线程冲突,该模型难以处理。因此,引入事务管理,确保操作的原子性。

但事务处理有难处:消息异步性带来的操作顺序问题,以及可能的并发修改。解决方法是运用软件事务内存(STM),通过乐观重试机制确保事务的完整性。这种方式无需锁,但仍需处理可能的冲突。

总结,多线程编程虽带来便利,但需谨防死锁和数据不一致。冯诺伊曼体系的内存管理与并发控制紧密相关,通过加锁和事务机制解决争夺与不一致问题。

上一篇:是谁拯救了数据库?
下一篇:我经历的7轮Google面试

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月21日 19时11分20秒