做英文网站用目录还是子域名,网站运营专员具体每天怎么做,浦东建设网站制作,公司做网站好文章目录 三大源头两个主要问题三大解决方案 最近正在面试#xff0c;对多线程和高并发相关问题整理了一个提纲。 个人感觉这三大部分由底向上#xff0c;足够展开对并发编程中大部分问题的讨论~ 三大源头
线程切换带来的原子性问题。
原子操作#xff1a;利用CPU提供的原… 文章目录 三大源头两个主要问题三大解决方案 最近正在面试对多线程和高并发相关问题整理了一个提纲。 个人感觉这三大部分由底向上足够展开对并发编程中大部分问题的讨论~ 三大源头
线程切换带来的原子性问题。
原子操作利用CPU提供的原子操作指令以及编程语言对这些指令的API封装。CAS算法比较并交换ABA问题(至少三个线程做CAS产生了错误的过程)用版本号解决。
CPU缓存带来的可见性问题程序员要编写符合Happens Before(可见性规则)的代码保证可见性。
编译器带来的有序性问题这种问题通常会出现在涉及到共享数据的多线程编程中因为编译器的优化可能会导致操作的重新排序从而破坏了程序的预期行为例如导致可见性问题。
两个主要问题
竞态条件。强调并发执行顺序带来的结果不一致。先判断后执行竞态条件、读-操作-更新竞态条件(如i)。
数据竞争。强调并发读写导致的未定义行为可能会引起程序的崩溃。
三大解决方案
同步也就是利用原子操作或者锁。使用(悲观)锁缺点是大量使用锁让很多逻辑都变成同步效率可能还不如单线程。
数据分片根据数据所有者划分出数据主体(Actor)每个主体在自己对应的线程中处理/访问自己的数据。
分布式架构对逻辑进行划分也是数据分片的一种思路采取分布式架构进一步提高并发量。