• fork()与vfork()的联系与区别


    联系:

    fork()与vfock()都是创建一个进程

    区别:

    1、fork()   : 子进程拷贝父进程的数据段,代码段。
         vfork() : 子进程与父进程共享数据段。
    2、fork()   : 父子进程的执行次序不确定。
         vfork() : 保证子进程先运行,在调用exec()或exit()或_exit()之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。 
    3、vfork() : 保证子进程先运行,在调用exec()或exit()或_exit()之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

    对于vfork理解: 为什么会有vfork,因为以前的fork很傻,它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,而往往在子进程中会执行exec调用,这样,前面的拷贝工作就是白费力气了,这种情况下,聪明的人就想出了vfork,它产生的子进程刚开始暂时与父进程共享地址空间(其实就是线程的概念了),因为这时候子进程在父进程的地址空间中运行,所以子进程不能进行写操作,并且在儿子霸占”着老子的房子时候,要委屈老子一下了,让老子在外面歇着(阻塞),一旦儿子执行了exec或者exit后,相当于儿子买了自己的房子了,这时候就相当于分家了。

  • 相关阅读:
    章节十:Selenium
    章节七:csv&excel
    章节十三:协程实践
    章节十二:协程
    章节八:爬取知乎文章
    章节十五:Scrapy实操
    章节十六:复习与反爬虫
    章节十一:定时与邮件
    章节十四:Scrapy框架
    阅读习惯2
  • 原文地址:https://www.cnblogs.com/yongqiang/p/6083615.html
Copyright © 2020-2023  润新知