进程与线程

进程与线程
首先说一下什么是线程,进程内部的一条执行路径(说是一条控制序列更为准确)就是线程。

线程比进程更为轻量级,体现在1新线程的创建比新进程的创建的代价小得多,2线程比进程更容易实现数据的一致性以及加锁解锁的要求。3操作系统在处理线程之间的切换比处理进程之间的切换要做的工作少得多,因为线程要求的资源更小。接下来我将具体介绍这些方面。

一 创建

  • l  进程的创建由fork()+exec()两个函数一起完成,先fork()系统调用创建子进程,子进程是一个全新的进程,拥有自己的变量自己的pid,它的执行独立与父进程,也就是与父进程无关了。然后进程替换(进程替换是实际意义上的程序替换,进程本身没有改变,替换的是进程的主体,也就是程序)。//关于exec,我在评论补充。

进程与线程_第1张图片

线程的创建


         IntPthread_create(线程的ID,线程的属性一般为空,线程函数,函数的参数);

         线程函数不是用户调用的,而是用户启动线程,线程完成对函数的调用。

线程的退出:退出的是当前的线程


线程返回传一个常量,不能是线程内部的变量,线程结束后线程栈也消失了

进程等待线程的结束,并接收它返回给主线程的信息。还有合并线程的功能:


二 共享数据

  • 父子进程中的全局变量、局部变量、堆变量都不是共享的。子进程会自己拷贝一份,显示的地址是对于进程起始的偏移量--逻辑地址。文件是共享的,先打开的文件在经过fork()之后会被复制到子进程中,子进程可以操作父进程打开的文件,和父进程共享文件偏移量,彻底关闭该文件则需要父子进程都关闭,如果赋值后,父进程单方面关闭,子进程仍可访问。在之后讲到通信方式:父子进程不会共享锁,fork之后只是拿到锁的状态,但是另一把新的锁了。//这其中又涉及到写时拷贝技术,我在评论补充。
  • l  在进程中创建线程之后,新的执行线程会拥有自己的栈,栈上存放着自己的局部变量,但是与主线程(也就是它的创建者)共享全局变量,文件描述符,信号处理函数,当前目录状态。

你可能感兴趣的:(操作系统)