菜鸟初步学习,不对的地方请大神指教,参考《C#并行编程高级教程.pdf》
背景
当今计算机至少都有一颗双核的微处理器,带有四核、八核的计算机非常常见,在单个处理器上具有多个内核的时代正在来临,现代微处理器提供了新型的多核架构,因此软件设计和编码能够充分发挥这些架构的功能是非常重要的事情。
多核微处理器
多核微处理器有很多种不同的复杂微架构,意在提供更强的并行执行能力,提升吞吐量,减少潜在的性能瓶颈,缩减电源消耗,并减少发热量,因此,现代很多的微处理器可以根据工作负载提升或降低每个内核的时钟频率,甚至可以将不在使用中的内核进入睡眠状态,等需要这些内核的时候,操作系统又会唤醒它们。
硬件线程与软件线程
多核处理器带有一个以上的物理内核,每个物理内核都可能会提供多个硬件线程,也称之为逻辑内核或者逻辑处理器。
Windows中每个运行的程序都是一个进程(process),每个进程都会创建并运行一个或者多个线程,也被称为软件线程(software thread),在一个进程当中只要有一个线程,这个线程我们称之为主线程(main thread)。
操作系统的调度器在所有要运行的进程和线程之间公平的分享可用的处理资源,给每一个软件线程分配处理时间,当Windows调度器运行在多核微处理器上时,调度器必须从物理内核支持的硬件线程中分配时间给一个需要运行指令的软件线程。
Windows将每一个硬件线程识别为一个可调度的逻辑处理器,每一个逻辑处理器可以运行软件线程代码,运行多个软件线程的进程可以充分发挥硬件线程和物理内核的优势,并行地运行指令。Windows会给每一个可用的硬件线程分配一块块的处理时间,并通过这种方式运行上百个千个软件线程。
基于任务的并行化设计规则
1.将每个问题分为很多子问题,不需要考虑子问题任务的执行顺序(能够以并行方式处理的数据,能够以某种复杂的并行化处理的数据流等)
2.考虑不用问题连接起来的必要性,需要避免任务与任务之间的依赖性。
3.减少任务与任务之间的临界区。
并行任务的利与弊
1.并行任务的运行和管理都是需要开销的,在程序中需要执行的任务越多,并行的效果越好。
2.并行任务中对于共享的资源或数据越多,对并行任务的执行性能损耗越大,如果每个任务的资源都是独立存在的,性能会好很多。
写的有点乱,大家稍微讲究着看下,主要是windows调度器,多核微处理器,硬件线程,软件线程之间的关系 以及 并行任务开发的良好的约束,不对的地方希望大家指正