在Linux上学习编程C ++而不是在Windows上使用Linux VM学习是否有区别?
我最初的猜测是没有区别 - 虚拟机只是表现得像普通的Linux操作系统一样?
我这样做是为了特别在Linux上进行C ++编程,包括Linux内核,Linux如何工作,IPC,套接字,共享内存,管道等。
答案 0 :(得分:5)
当您编写多线程程序或在共享数据上执行IPC时,可能会遇到VM遇到的最大问题。不幸的是,由于大多数VM的工作方式,您最终可能会屏蔽时间问题,这些问题会导致本机运行Linux内核的“真实”机器崩溃,或者至少是不合需要的行为。例如,由于在运行时不会崩溃,因此在VM上可能看起来是良性的数据争用可能会导致,因为物理机器上固有的更快的计时,真正的数据争用可能很难调试。可能发生的与时序相关的问题的另一个示例可能是您有多个进程使用单个读取器写入管道。由于VM的速度,您可能会观察到每个写入过程都能够将其整个有效负载原子写入管道的行为,即使该有效负载大于PIPE_MAX
的保证原子性...如果您编程对于那种类型的行为,在真机上,当PIPE_MAX
以上的任何内容与写入管道的其他进程交错时,您可能会感到非常惊讶。
因此,最终,您在虚拟机上执行多线程编程或共享数据IPC时,能够观察到缺少过程数据损坏或从潜在数据争用中崩溃的事实并不能确保您的程序实际上是数据竞争免费,或者它不会在交叉操作的时间要快得多的物理机器上崩溃。 VM的速度可能只是为您掩盖这些问题。