2012-10-21 35 views
0

我正在C中创建一个依赖于异步方法调用的应用程序。在我最好的迄今所作的努力,使我目前正在执行的代码看起来像这样它的跨平台:在单核处理器上创建线程

#ifdef TARGET_WINDOWS 
//Windows threading API 
#else 
//pthreads API 
#endif 

我欣赏有可能是一个更好的方式来做到这一点,但是这不是我的问题点。我的问题是,单核处理器上的程序会发生什么?线程是否仍然是异步执行的(交错的指令也许),还是我坚持只在单核CPU上执行单线程?

+0

- 人的回答是肯定这一点,这是很公平的,但只是为了让你的心智模型直记住,它不会替代* *指令(当然,它可以和你可以认为这就是超线程,但它不是在单个内核上执行多任务的通用模型)。时间片很可能是一秒钟的“重要”部分,我认为Linux通常会变化10-300毫秒。和靠近低端的Windows。更像是交叉树,而不是交叉树,因为这可能是数百万条指令的时间。 –

+0

@SteveJessop我有一些澄清的问题。当运行不同优先级的线程时会发生什么情况。低优先级线程只有在高优先级线程完成后才运行? (鉴于http://man7.org/linux/man-pages/man7/sched.7.html说:“一个线程的调度策略决定它将被插入到具有相同静态优先级的线程列表中的位置以及它如何被插入到0123将 移到此列表中。“)。虽然对我来说,似乎即使是低优先级的线程也需要一些时间。 – qqqqq

回答

2

在这一天结束的单一核心只能运行一次一个线程。线程调度器将中断正在运行的线程,并让另一个线程有机会运行指定的量子。

现在到底发生了什么是高达操作系统。但是,如果所有的工作都受到CPU限制,也许需要进行一些密集计算,那么由于上下文切换的成本,整个性能实际上可能随着更多线程而降低。但是,如果您正在等待I/O,则操作系统可以安排另一个线程同时运行以使用CPU。 “也许是交错的说明”

+0

操作系统是否可以在单核处理器中调度另一个? – Praneeth

1

该线程将同时执行,即使是单核心。这是因为抢先调度,这意味着OS会暂停线程以让其他线程运行。

这是所有常见的桌面操作系统真。但是,嵌入/“实时”-OS可能不同。单核CPU上

0

线程分别获得依次从操作系统微小的时间片,这取决于几个因素,如静态和动态优先级,过程的类型,他们正在运行中,等点是,他们将运行以并行(ish)方式(事实上同时)通过在单个CPU上交错执行。

相关问题