进程与线程你真的了解吗?

线程与进程

进程

计算机的核心是CPU,目前众多CPU已经是多核的

进程与线程你真的了解吗?

那么进程也就相应的包含了上图中的相关内容

  • 内存:这里的内存是逻辑内存。指的是内存的寻址空间。每个进程的内存是相互独立的。
  • 文件/网络句柄:它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的。
  • 线程:接下来我们会继续讲解

线程

它是进程执行任务的多个分支

进程与线程你真的了解吗?

那么线程也就相应的包含了上图中的相关内容

  • :我们通常都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。
    那么我们的栈里面有什么呢?
    我们从主线程的入口main函数,会不断的进行函数调用,
    每次调用的时候,会把所有的参数和返回地址压入到栈中。

  • PC:(Program Counter) 程序计数器,操作系统真正运行的是一个个的线程,
    而我们的进程是一个装线程的容器。PC就是指向当前的指令,而这个指令是放在内存中。
    每个线程都有一串自己的指针,去指向自己当前所在内存的指针。
    计算机绝大部分是存储程序性的,说的就是我们的数据和程序是存储在同一片内存里的
    这个内存中既有我们的数据变量又有我们的程序。所以我们的PC指针就是指向我们的内存的。

    ​ **缓冲区溢出:**从这里我们来引出一个概念就是缓冲区溢出,本来呢一个标准内存空间就那么大,而你呢,作为一 个小白,就想把信息填写的很满,超过了控件容量,导致信息到了别家的内存空间。

  • TLC:全称:thread local storage之前我们看到每个进程都有自己独立的内存。
    这时候我们想,我们的线程有没有一块独立的内存呢?答案是有的,就是TLS。
    可以用来存储我们线程所独有的数据。
    可以看到:线程才是我们操作系统所真正去运行的,而进程呢,则是像容器一样他把需要的一些东西放在了
    一起,而把不需要的东西做了一层隔离,进行隔离开来。

我们来生动的比喻一下吧

  • 首先我们将CPU比喻成一个工厂

    进程与线程你真的了解吗?
  • 那这个工厂每次呢只能将能源供给一个车间使用,也就是说单个CPU一次只能运行一个任务

  • 可想而之,一个车间呢,会有许多的员工,协同完成一个任务

进程与线程你真的了解吗?
  • 线程呢,就好比工厂里的工人,一个进程可以包括多个线程,也就是说一个车间里面有很多个工人在工作
进程与线程你真的了解吗?
  • 车间中的空间呢,是工人们的共享空间,也就是说,线程呢是共享一个进程空间的
进程与线程你真的了解吗?
  • 但是!每个房间容纳人的数量使不同的,不如说厕所
进程与线程你真的了解吗?
  • 如果有人已经在厕所中了,那么其他人就要等待这个人出来,才能在使用厕所,这也就意味着线程中内存虽然是共享的,但是避免造成混乱,要有一定的权限处理

  • 那么对于这种权限控制,简单的处理方式就是上锁

    对于锁就有下面的几种类型

    锁的类型 功能 实例
    互斥锁 防止多人共同使用 上厕所,一人使用其他人都不能用
    读写锁 可以使多人使用不同功能 车间工作,一个人使用车间操作台,其他人虽然不能操作,但是可以看
进程与线程你真的了解吗?
  • 那么进程间是不是真的不能进行交流呢?
  • 答案是在某些操作下是可以的,比如说大家使用电话进行进行交流,
  • 也就是管道处理
  • 或者是共享内存

小结

  • 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 进程是资源分配的最小单位,线程是程序执行的最小单位。
  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.