任务并行
多处理器调度
一般任务在处理器上通过调度用户线程(User Thread,相对于内核线程Kernel Thread)实现的。操作系统也可提供一个用户模式下的调度器。调度器的任务就是尽可能合理的将任务分配和均衡到各个处理器上。
相关概念
同步 是任务并行里涉及到最重要的任务之间通信的方法,分为 进程同步 (或者 线程同步 )和 数据同步 。数据同步和进程同步的目的是为了使程序在多处理器执行的条件下保持一定的内存模型。
进程同步主要研究如何确定数个进程之间的执行顺序和避免 数据竞争 (Data race condition)的问题。避免数据竞争的常用方法是在程序中设立临界区,即一次只允许一个线程执行的一段代码,通常用于保护重要的公共变量。然而也有理论研究一次允许数个线程执行临界区代码的一般情况,称为 l-exclusion ( 英语 : l-exclusion ) 问题。
数据同步则是研究如何保证在一个变量的多个副本之间保持一致性的问题。数据同步通常涉及到的话题有Cache一致性(Cache Coherence),数据复制(Data replication)等等。
同步对象 是用于实现同步的数据结构对象。可分为内核同步对象与用户同步对象。用户同步对象更有效率;内核同步对象使得线程在用户态与内核态切换,花销巨大。用户态的同步对象有临界区与原子操作等;内核态的同步对象有内存屏障(Memory barrier)、互斥锁(Mutex)、信号量(Semaphore)和锁(Lock)、管程(Monitor)、消息(Message)、自动重置事件、人工重置事件、自动重置定时器、人工重置定时器、进城、线程、作业、文件、 控制台输入、文件修改通知、管道(Pipe)等。
内核同步对象通常有 signaled 与 nonsignaled 两种状态,可分别译作置位的(标志的、通知的)与未置位的(未标志的、未通知的)。当操作系统设置一个同步对象为signaled,任何等待该对象的线程被从该对象上释放,从等待状态变为可执行状态。同步对象通过等待句柄(waitable handle)访问。等待句柄处于signaled状态,则该等待句柄不被任何线程拥有。
Windows操作系统的API:WaitForSingleObject、WaitForMulitpleObjects、SignalObjectAndWait(通知一个内核对象并等待另一个内核对象的原子操作)、MsgWaitForMultipleObjects(等待多个内核对象阻塞时仍可以响应Windows消息的到来)、MsgWaitForMultipleObjectsEx用来等待同步对象从nonsignaled变为signaled状态。
参见
内存一致性模型(Memory consistency model)
数据并行
事务内存(Transactional memory)
并发系统(Concurrent system)
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值