在 Linux 上学习 C++ 编程与在 Windows 上通过使用 Linux VM 学习有什么区别?
我最初的猜测是没有区别——虚拟机只是像普通的 Linux 操作系统一样工作?
我这样做是为了特别关注 Linux 上的 C++ 编程,包括 Linux 内核、Linux 的工作原理、IPC、套接字、共享内存、管道等。
当您编写多线程程序或对共享数据执行 IPC 时,可能会遇到使用 VM 时遇到的最大问题。不幸的是,由于大多数 VM 的工作方式,您最终可能会掩盖时序问题,这些问题会导致在本机运行 Linux 内核的“真实”机器上崩溃,或者至少是不受欢迎的行为。例如,由于在运行时不会崩溃而在 VM 上看似良性的数据争用可能会由于物理机上固有的更快时序而导致真正的数据争用可能非常难以调试. 可能发生的与时间相关的问题的另一个示例可能是您有多个进程使用单个读取器写入管道。由于虚拟机的速度,PIPE_MAX
...如果您针对这种类型的行为进行了编程,那么在真实机器上,您最终可能会大吃一惊,因为任何事情PIPE_MAX
都会与写入管道的其他进程交错。
所以最后,在虚拟机上进行多线程编程或共享数据 IPC 时,您能够观察到进程数据损坏或潜在数据竞争导致崩溃的事实并不能保证您的程序实际上是数据竞争免费的,或者它不会在交错操作的时间更快的物理机器上崩溃。虚拟机的速度可能只是为您掩盖了这些问题。