线程概念浅谈

  • 线程概念浅谈已关闭评论
  • 84 次浏览
  • A+
所属分类:linux技术
摘要

我们知道一个集成应用场景需要多个进程同时调度执行各自的功能,那么多进程的本质就是产生多个执行流,每个执行流执行不同的代码和功能,但是一个进程由PCB(task_struct)、进程地址空间、页表、文件描述符表等资源组成,是一个资源集合,创建的开销较大,那么为了满足用户的多执行流的需求的同时又降低开销,线程就因此诞生,一个进程可以有多个线程,同一个进程的线程共享同一份资源(进程地址空间、页表等)。


1. 为什么要有线程

我们知道一个集成应用场景需要多个进程同时调度执行各自的功能,那么多进程的本质就是产生多个执行流,每个执行流执行不同的代码和功能,但是一个进程由PCB(task_struct)、进程地址空间、页表、文件描述符表等资源组成,是一个资源集合,创建的开销较大,那么为了满足用户的多执行流的需求的同时又降低开销,线程就因此诞生,一个进程可以有多个线程,同一个进程的线程共享同一份资源(进程地址空间、页表等)。

2. 线程是什么

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。
认识线程,我们需要重新定义进程,我们对进程的粗浅认知是进程 = PCB + 进程资源,但是我们一般认为一个进程只有一个PCB,是因为我们的程序一般都是单线程执行流,而多线程执行流就是有多个PCB指向同一份资源(进程地址空间、页表等)。

2.1 线程的理解

线程是CPU调度的基本单位,如果一个进程有多个线程,那么OS肯定要对其进行管理、运行、终止等操作,如何管理——先描述,再组织。
Linux的设计者认为,进程和线程都是执行流,具有极度的相似性,没必要单独设计数据结构,因为一旦设计新的数据结构,就必然要设计配套的接口,编程难度增大,代码的维护也会更难,因此设计者想出直接采用PCB描述线程,复用以前描述进程的代码,来模拟线程,因此每一个PCB就对应一个线程,我们以前认识的进程就是特殊的一种形式——单线程进程(只有一个PCB)。

2.2 线程和进程之间的关系

将内存资源形象的表示为国家,进程表示一个个家庭,而线程就比作一个家庭中的一个个成员,每个成员都在并发地执行各自的工作,共享同一份家庭资源(房子、汽车等等),都是在为这个家庭生活所努力。