聊聊并发和并发模型
问题的来源
以前的计算机都只有一个 CPU, 并且一次只能执行一个程序。后来出现了 多任务(multitasking) 使得计算机可以同时执行多个程序,但这并不是真正的“同时”,只是把 CPU 分成多个时间片,由操作系统去调度切换。再之后出现了 多线程(multithreading) 使得在一个程序里面可以同时执行多个控制流,就像你有多个 CPU 在执行同一个程序一样。在单 CPU 的计算机中,多线程的“同时”并不是“同时”,但现代计算机一般都是多核 CPU,不同的线程可以被不同的 CPU 核心同时执行,是真正的同时。
如果一个线程在读一块内存区域的同时,另一个线程在往里面写,那么这块区域的值是什么?或者两个线程同时写一块内存区域,它的值又是什么?假如我们没有对这些可能出现的结果进行防范,那么结果将是不可预测的。什么情况都可能发生。因此,我们需要在一些共享资源上做一些措施,例如内存、文件、数据库等。