当您编写多线程程序或对共享数据执行IPC时,可能会遇到VM遇到的最大问题.不幸的是,由于大多数VM工作的方式,你最终可能会屏蔽时间问题,这些问题会导致本机运行Linux内核的"真实"机器崩溃,或者至少是不合需要的行为.例如,由于在运行时不会崩溃,因此在VM上可能看起来是良性的数据争用可能会导致,因为物理机器上固有的更快的计时,真正的数据争用可能很难调试.可能发生的与时序相关的问题的另一个示例可能是您有多个进程使用单个读取器写入管道.由于VM的速度,您可能会观察到每个写入过程都能够将其整个有效负载原子写入管道的行为,即使该有效负载大于保证的原子性PIPE_MAX...如果您为该类型的行为进行了编程在一台真机上,你可能会有一个很大的惊喜,因为任何东西PIPE_MAX都会与写入管道的其他进程交错.
因此,最终,您在虚拟机上执行多线程编程或共享数据IPC时,能够观察到缺少过程数据损坏或从潜在数据争用中崩溃的事实并不能确保您的程序实际上是数据竞争免费,或者它不会在物理机器上崩溃,其中交错操作的时间将更快.VM的速度可能只是为您掩盖这些问题.