我以前在我的应用程序中使用过线程,并了解其概念,但最近在操作系统课程中我遇到了fork()。它与线程有些相似。
我通过谷歌搜索了解到它们之间的区别:
- Fork只是一个看起来与旧进程或父进程完全相同的新进程,但实际上是具有不同进程ID并拥有自己内存的不同进程。
- 线程是轻量级进程,具有较少的开销。
但是,我仍然有一些问题。
- 何时应该优先选择fork()而不是线程,反之亦然?
- 如果我想将外部应用程序作为子进程调用,那么我应该使用fork()还是线程?
- 在谷歌搜索时,我发现有些人说在线程内调用fork()是不好的事情。为什么人们想在线程内调用fork(),当它们可以做类似的事情吗?
- 是真的吗,fork()不能利用多处理器系统,因为父进程和子进程不会同时运行?
fork()
只会复制调用线程。由于fork()
使用 COW,因此它并不昂贵。当您想要使用fork()
但不直接跟随exec*()
时,使用线程通常是一个坏主意,因为其他线程可能持有无法在子进程中释放的锁,当其他线程突然停止时。 - 12431234123412341234123