我知道软件线程会获得一定的执行时间,并且每个软件线程轮流执行该块时间,但它们不会同时(在单个硬件线程上)执行。
我的问题是,当一个核心有2个或更多硬件线程时,每个硬件线程是在该核心上并行运行,还是像软件线程一样获得执行块的时间,玩“轮流执行”游戏?
硬件线程=逻辑核心。
我的问题是,当一个核心有2个或更多硬件线程时,每个硬件线程是在该核心上并行运行,还是像软件线程一样获得执行块的时间,玩“轮流执行”游戏?
硬件线程=逻辑核心。
每个(逻辑)核心只有1个(硬件)线程。
英特尔通过在1个物理核心上运行两个逻辑线程来使问题变得复杂,因此只有对某些处理器才适用您的问题。而超线程是复杂的,但大多数情况下是并发的。
对于我们程序员来说,只存在一次运行1个线程的逻辑核心。
如果你在谈论一个支持超线程的处理器,那么这个处理器对于大多数执行周期都有额外的执行管道。就 .net 应用程序而言,你将不会拥有软件线程所具有的时间分片和锁定。但你仍然需要确保你的操作是线程安全的,否则你需要自己进行锁定以确保你不会在同时从多个线程调用对象时破坏它们。验证这一点的快速测试是使用支持超线程的计算机,生成一些执行处理器密集型操作的线程,并查看 CPU 使用率。如果你看到所有虚拟核心都达到了 100%,那么你就成功了。