• 认真地记录技术中遇到的坑!

线程

C/C++ Moxun 10个月前 (02-28) 177次浏览 0个评论

前情提要:进程是程序一次执行的实例,多进程并发时,子进程拥有除了PCB之外父进程所有的一切。

程序:是指令的有序集合,本身没有任何运行含义,是一个静态概念。进程是个动态概念,是有生命周期的。通过多次执行,一个程序可以产生多个进程,通过调用关系,一个进程可以包含多个程序。

一:线程简介

线程是系统内核对象之一,内核对象实际上就是一个特殊的结构体,这个结构体中的成员负责维护对象的各种信息。内核对象的成员只能有内核来访问,应用程序无法在内存中找到这些数据结构并直接改变它们的内容。

常用的系统内核对象有文件对象、事件对象、作业对象、互斥对象、进程对象、线程对象等,不同类型的内核对象其数据结构各有不同。我们可以将进程理解为容器,它只是提供空间,具体执行程序的代码由线程来提供(所以main是一个线程),线程存在于进程中,它负责执行地址空间中的代码,当一个进程创建时,系统会自动为这个进程创建一个线程,该线程称为主线程。在主线程中,用户可以通过代码创建其它线程,当主线程结束时,进程也就结束了。

线程是轻量级进程,进程是系统分配资源的最小单位,那么线程就是系统执行的最小单位。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程不拥有系统资源,仅拥有少量运行所必须的资源。

二、线程的基本状态

线程的状态分为三种:就绪、阻塞、运行三种状态。

  • 就绪状态:指线程具备所有运行的条件,逻辑上可以运行,在等待处理机。
  • 运行状态:指线程占有处理机正在运行。
  • 阻塞状态:指线程在等待一个事件(如信号量),逻辑上不可执行。

三、进程和线程的关系

一个进程至少有一个线程。

进程和线程的主要区别是:它们是不同的操作系统资源管理方式。进程拥有独立的地址空间,一个进程崩溃后在保护模式下不会对其它进程产生影响。而线程只是进程中的一个执行路径。线程有自己的栈和局部变量,但线程没有自己独立的地址空间,一个线程崩溃就等于整个进程崩溃,因此,多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源比较大,效率比较差。

注:在Linux下线程和进程都使用task_struct这个结构体来刻画,只是创建的是线程的时候,会将一些资源属性设置为共享的,这样看起来就像是一个进程内的多个线程可以共享某部分数据似的。

线程和进程的扩充讲解,参考:https://www.cnblogs.com/ChunJian-YANG/p/5506209.


转载请注明出处 线程
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址