进程和线程区别

进程和线程的区别:

1,进程是资源的分配与调度的独立单元,线程是cpu调度的基本单元
2,进程包含多个线程,线程可以同时运行,共享整个进程资源(寄存器,堆栈,上下文)

3,线程是轻量级进程

4,线程之间共享全局变量,静态变量等数据。通信较为方便,但需要考虑同步和互斥的问题。进程之间需要通过IPC通信。

5,进程有自己的PCB,私有属性不共享,进程之间独立性更高,也就更加安全。多线程程序中某一个线程死掉,整个进程也会死掉。


进程创建函数,fork,v_fork

pid_t fork(void);
pid_t vfork(void);

1:fork()拷贝父进程数据段和代码段,vfork()不拷贝,但是共享数据段。
2:fork()父子进程运行不确定,vfork()在子进程(exec族函数)exit后父进程才能被调用

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

房子了,这时候就相 于分家了。

线程创建函数

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
线程终止

void pthread_exit(void * arg);

等待线程结束函数

void pthread_join(pthread_t *thread,void **arg);

该函数作用:

        在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到pthread_join()方法了。
        即pthread_join()的作用可以这样理解:主线程等待子线程的终止。也就是在子线程调用了pthread_join()方法后面的代码,只有等到子线程结束了才能执行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值