赞
踩
传统的fork系统调用直接把所有的资源复制给新创建的进程,但是这种实现过于简单,效率低下,因为并不支持拷贝数据的共享。
更糟的是如果新进程打算立即执行一个新的映像那么所有的拷贝都将前功尽弃。
Linux下面的fork采用的是写时拷贝的方法,也就是说让父进程与子进程拥有同一份拷贝,之后如果发生了写入数据的情况。再也根本不会被写入的情况下,它就不会复制了。例如直接调用了exec()
vfork函数其实在系统调用的时候步骤和fork一致但是,它不会拷贝父进程的页表项,子进程作为父进程的一个单独的线程执行。子进程运行在自己的内存空间内,父进程会在它执行的时候阻塞,知道子进程退出或执行exec
fork函数是通过clone系统来完成创建进程的。这个调用来标识一下父进程和子进程之间共享的资源。
其实大体上与进程差不多也就有一下几点区别
同一程序内共享内存地址空间运行一组线程,这些线程可以共享打开的文件和其他资源,支持并发程序设计技术(多处理器)
线程父子共享内存空间,文件系统资源,文件描述符信号处理程序等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。