分叉VS线程(Forking vs Threading)

2019-09-01 20:11发布

我在我的应用程序之前,使用线程,并且知道它的概念很好,但最近在我的操作系统讲座中,我通过fork出来()。 这是类似的东西线程。

我的google搜索的区别两者之间,我才知道:

  1. 叉只不过是一个新的工艺,看起来酷似老或父进程,但仍然是一个不同的过程用不同的进程ID,并有它自己的内存。
  2. 线程是轻量级进程其具有较少的开销

但是,仍然有在我脑海中的一些问题。

  1. 当你应该更喜欢叉()在线程和副诗句?
  2. 如果我要调用外部应用程序作为一个孩子,那么我应该使用fork()或线程做呢?
  3. 虽然这样做谷歌搜索,我发现人们说这是坏事调用fork()的线程中。 人们为什么要调用fork()的线程内,当他们做类似的事情?
  4. 这是真的,叉()不能充分利用多处理器系统中,因为父子进程不会同时运行?

Answer 1:

分叉和线程方法之间的主要区别是操作系统体系结构中的一个。 早在当Unix的设计时代,分叉是一个容易的,简单的系统,最好的回答大型机和服务器类型的需求,因此它是普及的Unix系统。 当微软重新设计的从零开始的NT内核,它更侧重于线程模型。 因此今天还有与Unix系统是高效与派生,和Windows使用线程更高效的一个显着的区别。 你可以最明显的是看到这个阿帕奇它使用Unix上的prefork的策略,和线程池在Windows上。

具体到你的问题:

当你应该更喜欢叉()在线程和副诗句?

在Unix系统中,你正在做的不仅仅是实例化一个工人,或者你想单独进程的隐式安全沙箱一个更为复杂的任务。

如果我要调用外部应用程序作为一个孩子,那么我应该使用fork()或线程做呢?

如果孩子会做相同的任务交给了父母,具有相同的代码,用叉子。 对于较小的子任务使用线程。 对于单独的外部进程都不使用,只是叫他们用正确的API调用。

虽然这样做谷歌搜索,我发现人们说这是坏事调用fork()的线程中。 人们为什么要调用fork()的线程内,当他们做类似的事情?

不能完全肯定,但我认为这是计算上相当昂贵的复制过程和大量的子线程的。

这是真的,叉()不能充分利用多处理器系统中,因为父子进程不会同时运行?

这是假的,叉创建一个新的进程,然后需要的可在操作系统任务调度程序的所有功能。



Answer 2:

A forked process is called a heavy-weight process, whereas a threaded process is called light-weight process.

The following are the difference between them:

  1. A forked process is considered a child process whereas a threaded process is called a sibling.
  2. Forked process shares no resource like code, data, stack etc with the parent process whereas a threaded process can share code but has its own stack.
  3. Process switching requires the help of OS but thread switching it is not required
  4. Creating multiple processes is a resource intensive task whereas creating multiple thread is less resource intensive task
  5. Each process can run independently whereas one thread can read/write another threads data. Thread and process lecture


Answer 3:

fork()派生过程中的新副本,因为你已经注意到。 什么是不上面提到的是exec()经常如下调用。 这个替换为新的过程(一个新的可执行文件),因此,现有工艺fork() / exec()是从旧一个产生一个新的进程的标准手段。

例如,这是怎么你的shell会在命令行中调用一个过程。 您指定的过程( ls ,说)和外壳叉,然后高管ls

请注意,这个工作在从线程一个非常不同的级别。 线程运行执行过程内的多条线。 分岔是创建进程的一种手段。



文章来源: Forking vs Threading