多核cpu下的多线程和单核cpu下的多线程在编程中有那些区别?

goding 2008-05-14 09:30:10
多核cpu下的多线程和单核cpu下的多线程在编程中有那些区别?有多核cpu下编写多线程需要要注意的问题有那些?(c#方面)
...全文
586 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tt_timon 2008-05-29
  • 打赏
  • 举报
回复
因为单核处理器只能将多个指令流交错执行,并不能真正将它们同时执行,所以,单核 结构上的多线程应用程序的性能就受到了限制。在单核平台上,多线程一般都被当做是一种能够实现延迟隐藏的有效编程手段。
单 核平台上的这种性能瓶颈在多核体系结构中就不存在了。在多核平台上,各线程根本不需要为了得到某种资源而挂起等待,因为各线程都是在相互独立的执行核上并 行运行的。例如,假设有两个线程都要执行移位操作,那么,在单核平台上,两个线程需要竞争唯一的移位单元,因而必须顺序执行,而对于双核平台而言,因为存 在两个移位单元,所以两个线程能够并行执行而无须竞争。
多 核平台为开发人员提供了一种优化应用程序的渠道,那就是通过仔细分配加载到各线程(或者各处理器核)上的工作负载(也就是实现各线程的负载均衡)就能够得 到性能上的提升。并且,开发人员也可以对应用程序代码加以优化,使其能够更加充分地使用多个处理器资源,进而达到提升应用程序性能的目的。
在面向多核平台设计多线程应用程序的时候,开发人员必须采取与面向单核平台时不同的设计思想。在单核平台上,为了简化多线程应用程序的编写和调试,开发人 员可能会作一些假设。但是这些假设可能不适用于多核平台。对于这两种平台,设计思想的不同之处主要体现在存储缓存(memory caching)和线程优先级(thread priority)两个方面。
在 存储缓存方面,多核平台上的每个处理器核都拥有自己的cache。在某个时间点上,一个处理器核上的cache与另一个处理器核上的cache可能会出 现不同步的现象。下面给出一个例子来解释可能出现的这种cache不同步问题。假设有两个线程分别运行在双核处理器的两个执行核上,线程1在执行核1上运 行,线程2在执行核2上运行,而两个线程分别对邻近的存储器单元进行读写操作。由于cache存储器是基于局部性原理来工作的,故不同的数据可能存放在 cache的同一行中。因此,即使某个线程所需的位于某个cache块中的数据没有被重写过,存储系统还是可能会将该cache块标记为无效。这个现象就 是众所周知的伪共享(false sharing)问题。但是在单核平台上,因为只有唯一的cache供各线程共享,所以就不存在cache同步问题。
在 单核与多核平台上采用相同的线程优先级策略也会导致不同的程序行为。例如,假设一个应用程序有两个进程,这两个进程的优先级不同。在进行性能优化的时候, 开发人员会假定优先级较高的线程可以一直享用执行资源,而不会受到优先级较低线程的干扰。这在单核平台上是正确的,因为操作系统的调度程序不会为优先级较 低的线程分配CPU资源,而对于多核平台而言,因为调度程序是在不同的执行核上调度这两个线程,所以两个线程是同时执行的,也就是说在这种条件下,线程的 优先级不起作用。如果开发人员仍然遵循优先级较高的线程不会受到优先级较低线程的干扰的思想对代码进行优化,这样的代码在多核和多处理器系统上运行就会非 常不稳定。
appleshao 2008-05-29
  • 打赏
  • 举报
回复
这问题我也想问 UP上去。
goding 2008-05-24
  • 打赏
  • 举报
回复
up
sageking2 2008-05-24
  • 打赏
  • 举报
回复
没什么区别.

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧