多次调用操作系统的开销是多少?
例如,Microsoft 有一个名为“Getpixel”的 API,您必须提供 x,y 坐标,它会返回一个颜色值。然后,Setpixel 必须向操作系统发出数百万个请求。
这样做的开销到底是多少?
多次调用操作系统的开销是多少?
例如,Microsoft 有一个名为“Getpixel”的 API,您必须提供 x,y 坐标,它会返回一个颜色值。然后,Setpixel 必须向操作系统发出数百万个请求。
这样做的开销到底是多少?
好吧,对于您给出的 GetPixel 示例,它很慢,因为它使用内核模式驱动程序来完成实际工作,并且在该驱动程序中,它会执行许多验证和锁定以查看您传递的设备上下文是否实际上是 DC 和为了确保它在函数中的某个地方没有被更改,然后它将一个区域的副本复制到内存中的一个新位图中,并从中读取您想要的像素,然后释放位图。
所以你有一个内核模式切换、锁、验证和内存分配、复制和释放,然后另一个模式切换回用户空间,所有这些都需要时间,在你的程序中找到一种方法来执行 GetPixel 功能将为你节省数十数千个时钟周期。
但是另一个 API 调用可能只花费不超过几次内存读取和写入,因此它在很大程度上取决于您对操作系统进行的哪个调用。
没有普遍的答案。取决于调用 - 例如,涉及 I/O 的调用将比不涉及 I/O 的调用慢 - 取决于操作系统如何实现系统调用 - 例如中断?跳转?-并且取决于体系结构-例如体系结构是否实现了系统调用指令?它是通过正常的跳跃来做到的吗?-。