简析fork和vfork区别以及进程和线程的区别和联系

来源:互联网 发布:查看linux系统版本命令 编辑:程序博客网 时间:2024/06/06 22:50

        今天首先分享一下,fork和vfork的用法和区别,我们都知道fork和vfork都可以创建一个新线程。

         vfork创建子线程,不会像fork一样拷贝父进程的进程环境,即不需要重新创建一个地址空间来存放子进程,vfork的子进程在父进程的地址空间中运行,而且只有当子进程遇到程序替换(exec)或exit后,父进程才会被调度,在这之前,父进程将一直被阻塞。有因为vfork的子进程在父进程的地址空间中运行,所以子进程的修改会影响父进程,故vfork的子进程一般不进行写操作,即不对父进程的编程环境进行修改;

vfork适应场合:子进程调用程序替换后的程序段,子进程执行exec家族函数。

缺陷(个人见解):vfork创建的子进程不适合进行写操作,因为子进程的修改会影响父进程。

相对于vfork,fork创建子进程,需要复制进程环境。

fork适合场合:子进程可以对进程环境做修改,父子都执行同(某)一段代码的情况。

        其次,分享一下进程和线程的区别和联系

       进程是系统进行资源分配和调度的一个独立单位进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。
       而线程是CPU调度和分派的基本单位,并且线程只是进程的一个实体而已,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
       联系:一个线程可以创建和撤销另一个线程;

                 同一个进程中的多个线程之间可以并发执行.

                 与进程对比,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
       区别:进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

       进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;而线程只是一个进程中的不同执行路径,一个线程死掉就等于整个进程死掉,因为,虽然线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,所以多进程的程序要比多线程的程序健壮。

       在进程切换时,耗费资源较大,效率要差一些,而进程切换,消耗的资源少,效率相对要高。

       故对于一些要求同时进行并且又要共享某些变量的并发操作,用线程是最好的选择,而且不能用进程。


       分享如上,愿大家天天有进步!

原创粉丝点击