写wordpress,seo定义,深圳网页制作推广排名,汽车门户网站开发文章目录 #x1f308; 一、线程的概念⭐ 1. 线程是什么⭐ 2. 线程的优点⭐ 3. 线程的缺点⭐ 4. 线程的异常⭐ 5. 线程的用途 #x1f308; 二、进程和线程⭐ 1. 进程和线程的区别⭐ 2. 进程的多线程共享⭐ 3. 进程和线程的关系⭐ 3. 进程和线程的关系 #x1f308; 一、线程… 文章目录 一、线程的概念⭐ 1. 线程是什么⭐ 2. 线程的优点⭐ 3. 线程的缺点⭐ 4. 线程的异常⭐ 5. 线程的用途 二、进程和线程⭐ 1. 进程和线程的区别⭐ 2. 进程的多线程共享⭐ 3. 进程和线程的关系⭐ 3. 进程和线程的关系 一、线程的概念
⭐ 1. 线程是什么 线程是 CPU 调度的基本单位。 一个程序中的一条执行路线被称作线程 thread确切的说线程是一个进程内部的控制序列。 只要是进程则至少会有一个执行线程。 线程是在进程的内部运行的执行流本质是在进程地址空间内运行。 在 Linux 中没有线程的概念只有轻量级进程其复用了进程 PCB 的结构和调度算法但看到的 PCB 要比传统进程更轻量化。 由于线程的大部分内容和进程类似如果要重新设计线程相关的结构体和调度算法就很不划算。 透过进程虚拟地址空间能够看到进程的大部分资源将进程资源合理分配给每个执行流就形成了线程执行流。
1. 进程的创建与映射
创建进程需要创建进程控制块 task_struct、进程地址空间 mm_struct、页表。虚拟地址 (进程地址空间) 和物理地址之间还要通过页表建立映射。每个进程都拥有独立的地址空间和页表即进程在运行时本身就具有独立性。 2. 线程的创建与映射
如果创建多个 task_struct并让这多个 task_struct 共享进程地址空间和页表这多个 task_struct 就是进程内部的多个执行流即为 “线程”。相比于进程线程的创建成本明显低了很多只需要创建出 task_struct 然后复用进程的地址空间和页表即可。线程在进程内部运行本质就是线程在进程地址空间内运行即进程曾经申请的所有资源几乎都是被所有线程共享的。 3. CPU 无需识别调度的是进程还是线程
CPU 只关心执行流一个进程内至少要有一个执行流且不管进程内有多少个执行流CPU 都是以 task_struct 为单位进行调度。
单执行流被 CPU 调度 多执行流被 CPU 调度 4. Linux 中线程的实现方案
Linux 中并不存在真正的线程只有轻量级进程的概念其复用了进程的数据结构和相关算法。OS 中会存在着大量的进程而一个进程中又存在 1 ~ n 个线程线程的数量肯定是比进程多的。如果 OS 要实现真正的线程就要专门实现线程的结构体、创建线程、终止线程、调度线程等一切与线程有关的算法越复杂越不好。在 Linux 看来进程控制块和线程控制块的相似点有很多没必要专门去为线程设计一套数据结构直接复用进程结构相关算法即可。
⭐ 2. 线程的优点
创建一个线程的代价比创建一个进程的代价小很多。和进程间的切换相比线程之间的切换需要 OS 做的工作会少很多。线程占用的资源比进程少很多。线程可以充分利用多处理器的可并行数量一般 CPU 是几核的就创建几个线程。在等待慢速 IO 操作的过程中程序还可以执行其他的计算任务。计算密集型应用为了能在多处理器系统上运行会将计算分解到多个线程中实现。IO 密集型应用为了提高性能将 IO 操作重叠线程能同时等待不同的 IO 操作。
⭐ 3. 线程的缺点
性能损失一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享一个处理器。如果计算密集型线程的数量比可用的处理器多那么可能会有较大的性能损失这里的性能损失指的是增加了额外的同步和调度开销而可用的资源不变。健壮性降低编写多线程需要更全面更深入的考虑在一个多线程程序里因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的换句话说线程之间是缺乏保护的。缺乏访问控制 进程是访问控制的基本粒度在一个线程中调用某些 OS 函数会对整个进程造成影响。编程难度提高编写与调试一个多线程程序比单线程程序困难得多。
⭐ 4. 线程的异常
线程崩溃会导致进程崩溃单个线程如果出现除零野指针问题导致线程崩溃进程也会随着崩溃。线程异常会导致进程终止线程是进程的执行分支线程出异常就类似进程出异常进而触发信号机制终止进程进程终止该进程内的所有线程也就随即退出。
⭐ 5. 线程的用途
合理的使用多线程能提高 CPU 密集型程序的执行效率。合理的使用多线程能提高 IO 密集型程序的用户体验。 二、进程和线程
⭐ 1. 进程和线程的区别
进程是资源分配的基本单位线程是CPU调度的基本单位。线程共享进程的数据但也拥有自己的一部分数据线程 ID、一组寄存器、独立栈结构、errno、信号屏蔽字、调度优先级。
⭐ 2. 进程的多线程共享
由于使用的是同一个地址空间因此所谓的代码段、数据段都是共享的 如果定义一个函数在各线程中都可以调用。如果定义一个全局变量在各线程中都可以访问到。
线程共享的进程资源和环境
文件描述符表进程打开一个文件后其他线程也能够看到。每种信号的处理方式SIG_IGN、SIG_DFL或者自定义的信号处理函数。当前工作目录。用户 ID 和组 ID。
⭐ 3. 进程和线程的关系
在接触多线程之前之前所接触的都属于单线程进程。
FL或者自定义的信号处理函数。
当前工作目录。用户 ID 和组 ID。
⭐ 3. 进程和线程的关系
在接触多线程之前之前所接触的都属于单线程进程。