3

并发编程基础底层原理学习(二) - Sierra、

 2 years ago
source link: https://www.cnblogs.com/crstly/p/16213747.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

并发编程基础底层原理学习(二)

进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间互不干扰。同时进程保存着程序每一个时刻运行的状态。进程的两个基本元素是程序代码和与代码关联的数据集。进程执行的任意时刻包含了以下元素:

  • 标识符:与进程相关的唯一标识符,用来区分其他线程
  • 状态:若进程正在执行,则进程处于运行态
  • 优先级:相对于其他进程的优先顺序
  • 程序计数器:程序中即将执行下一条指令的地址
  • 内存指针:包括程序代码和进程相关数据的指针
  • 上下文数据:进程执行时处理器的寄存器中的数据

现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个线程里可以创建多个线程。进程中拥有一个或多个线程,在线程中有一个程序计数器,用来记录接着要执行哪一条指令。线程拥有寄存器,用来保存线程当前的工作变量,线程还拥有一个堆栈,用来记录执行历史,其中每一帧保存了已调用但是还没有从中返回的过程。

image-20220501191358029

上图展示了线程在运行的生命周期中6种不同的状态,在给定的一个时刻,线程只能处于其中的一个状态。

进程和线程的区别

进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O)

  • 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。
  • 进程单独占有一定的内存地址空间,一个进程出现问题不会影响其他进程,不影响主程序的稳定性,可靠性高;一个线程崩溃可能影响整个程序的稳定性,可靠性较低。
  • 进程单独占有一定的内存地址空间,进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销较大;线程只需要保存寄存器和栈信息,开销较小。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK