0

我正在用 C 语言制作一个依赖于异步方法调用的应用程序。到目前为止,我尽最大努力使其跨平台,我目前正在实现如下所示的代码:

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

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

4

3 回答 3

2

归根结底,单个内核一次只能运行一个线程。线程调度程序将中断正在运行的线程并让另一个线程有机会运行指定的量程。

现在究竟发生什么取决于操作系统。但是如果你的所有工作都受 CPU 限制,也许是一些密集的计算,那么由于上下文切换的成本,整体性能实际上可能会随着线程的增加而降低。但是,例如,如果您正在等待 I/O,则操作系统可以在此期间安排另一个线程运行以利用 CPU。

于 2012-10-21T12:16:21.977 回答
1

线程将同时执行,即使在单个内核上也是如此。这是因为抢占式调度,这意味着操作系统将暂停线程以让其他线程运行。

这适用于所有常见的桌面操作系统。但是,嵌入式/“实时”-操作系统可能会有所不同。

于 2012-10-21T12:14:29.650 回答
0

单核 CPU 上的每个线程依次从操作系统获得微小的时间片,这取决于一些因素,例如静态和动态优先级、它们正在运行的进程类型等。关键是,它们将并行运行( ish)时尚(实际上同时)通过在单个 CPU 上交错执行。

于 2012-10-21T12:16:18.540 回答