Q:如果一个线程在读一个内存时,另一个线程正向该内存进行写操作,那进行读操作的那个线程将获得什么结果呢?(A:不可预测)
多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发读写操作。随着多核CPU的出现,也就意味着不同的线程能被不同的CPU核得到真正意义的并行执行。
并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。
1.在并发系统中线程之间可以相互通信
2.并发模型:a.并行工作者模型:委派者(Delegator)将传入的作业分配给不同的工作者。每个工作者完成整个任务。工作者们并行运作在不同的线程上,甚至可能在不同的CPU上。
b.流水线并发模型 / 反应器系统 / 事件驱动系统 / 无共享并发模型:类似于工厂中生产线上的工人。每个工作者只负责作业中的部分工作。当完成了自己的这部分工作时工作者会将作业转发给下一个工作者。每个工作者在自己的线程中运行,并且不会和其他工作者共享状态。
c.函数式并行模型 :采用函数调用实现程序(某个函数调用另一个函数,这个过程类似于消息发送)。函数都是通过拷贝来传递参数的,所以除了接收函数外没有实体可以操作数据。这避免了共享数据。同样也使得函数的执行类似于原子操作。每个函数调用的执行独立于任何其他函数的调用。