我在C中创建一个依赖于异步方法调用的应用程序。到目前为止,我努力使其跨平台,我目前正在实现如下代码:
#ifdef TARGET_WINDOWS
//Windows threading API
#else
//pthreads API
#endif
我很欣赏可能有更好的方法,但这不是我的问题。我的问题是,单核处理器上的程序会发生什么?线程是否仍然异步执行(可能是交错指令),还是仅仅在单核CPU上执行单线程执行?
答案 0 :(得分:2)
在一天结束时,单个核心一次只能运行一个线程。线程调度程序将中断正在运行的线程,并为另一个线程提供运行指定量程的机会。
现在究竟发生了什么取决于操作系统。但是,如果您的所有工作都受CPU限制,可能是一些密集的计算,那么由于上下文切换的成本,整体性能实际上可能会因为更多线程而降级。但是,如果您正在等待I / O,那么操作系统可以安排另一个线程在此期间运行以利用CPU。
答案 1 :(得分:1)
线程将同时执行,即使在单个核心上也是如此。这是因为抢占式调度,这意味着操作系统会暂停线程以让其他线程运行。
对于所有常见的桌面操作系统都是如此。但是,嵌入式/“实时”-OS可能会有所不同。
答案 2 :(得分:0)
单核CPU上的线程依次从操作系统中获取微小的时间片,具体取决于一些因素,例如静态和动态优先级,它们运行的进程类型等等。点是,它们将在并行(ish)方式(实际上同时)通过在单个CPU上交错执行它们。