关于进程和线程的理解

1.进程

1.1进程的定义

在并发系统中,进程是在由内核定义的数据结构上执行操作的一个计算活动,它是系统进行资源分配和调度的一个独立单位、进程是动态的,有生命周期的,内核可以创建一个进程,并有调度程序’调度‘而运行,在请求I/O操作时被阻塞,当它完成自己的历史使命后,将有内核终止该进程使其消亡

1.2进程的特征

进程的基本特征是动态性和并发性,同时还具有顺序性、独立性和异步性。

  • 动态性:即体现在其生命周期,能够冬天的产生,运行并消亡。
  • 并发性:允许多个进程来执行同一个代码,即并发性,程序一旦被加载到内存,内核就可以允许一个或者多个进程来执行它,因此进程只代表一个计算活动的执行,而不是的代码本身,进程跟进程之间的控制,由内核完成,保证他们相互独立,互不影响。
  • 进程的顺序性:是指在单个顺序处理机上,系统中正在运行的进程无论是发生同步事件还是异步事件,只有当一个操作结束后,才开始其后续的操作。
  • 进程的独立性:是指每个进程是是系统中独立的实体,它有自己的程序计数器和内部状态,因此进程是系统进行资源分配和调度的基本单位。
  • 进程的异步性:是指系统中的进程是按照各自独立的,不可确定的时间发生的

2.线程

2.1线程的定义

实际上,一个进程是有一个PCB(进程控制块)数据结构和一个可执行代码的指令序列组成,如果单纯的从CPU执行程序所需要的硬件 上下文去考虑,PCB中绝大部分成员与CPU执行程序代码是没有关系的。因为CPU执行所必须的、并且对程序员可见的硬件资源只包含:程序计数器、执行堆栈、通用寄存器组合状态标志。CPU执行程序是根据程序计数器中的地址来取下一条指令代码,因此在程序代码运行期间,CPU执行流程由’经过‘程序计数器的指令地址序列来描述,这个地址序列就是指令的执行轨迹,叫做执行线程,简称线程。它是进程的控制流程。

2.2多线程

    在一个进程允许多个线程时,它们都共享该进程的状态和资源,也就是说它们驻留在同一个用户地址空间中,可以访问相同的数据。当一个线程改变了所属进程的变量时,其他线程在下次访问该变量时就会看到这种改变。

   由于每个线程具有自己的执行堆栈、程序计数器、寄存器集和状态标志,所以同样要为每个线程定义一个抽象数据类型来包含这些数据成员,以实现线程之间的切换。由于同一进程的多个线程共享同一地址空间,因此引入多线程后为系统管理带来好处。

  • 线程之间切换减轻内存管理的负担,线程切换所花时间也比进程切换少。
  • 系统创建或者终止一个线程的开销比进程少
  • 线程之前通信效率高于进程之间通信效率,进程通信需要内核介入,而同一进程的多线程位共享同一地址空间,通信不需要内核介入
  • 需要增加CPU开销,以便追踪线程
  • 线程之间也存在着共享资源的问题

2.3内核线程和用户线程

    内核中的线程是一个调度的实体,它的创建与撤销跟进程无关系,而是根据核心的内部管理需求来确定的,linux操作系统支持内核线程,它的页面交换进程kswpd就是一个内核线程。

  用户线程,即进程中的线程,但进程中线程对内核来说是透明的,或者说内核无需知道它们的存在,这些线程将一起竞争分配给进程的资源。

发布了26 篇原创文章 · 获赞 0 · 访问量 7530

猜你喜欢

转载自blog.csdn.net/gaoxiaobai666666/article/details/90638882