并发编程需要解决的三大问题:互斥、同步和分工。 并发编程 - 图1

为了解决CPU-内存两者速度不一致的问题,引入了CPU缓存。如果是单核CPU,线程A操作了某个数据后,更新到CPU缓存,线程B能拿到最新的数据,但是当引入多核CPU后,就会出现多个CPU之间数据可见性的问题【1】。
当操作系统引入分时调度后,在某个线程操作执行到一半时,该线程的时间片结束,另外一个线程恰好操作同一份数据,可能就会出现数据不一致的问题。
为了加速程序的执行速度,汇编代码有时候会对指令进行重排序,指令重排序对当前线程的结果没有影响,但是可能会导致其它线程得到非预期的结果。

并发编程

并发编程带来的收益

  • 充分利用CPU等系统资源,能够提升系统的容量、降低服务耗时等;

    并发编程的问题

  • 频繁的上下文切换,造成CPU资源

  • 线程安全问题