学习线程基础 线程的基本概念线程的英文单词是thread翻译成对应的中文有”分支“、”枝干“的意思当然这里翻译成”线程“属于意译了。提到线程就不得不提与线程相关联的另外一个概念”进程“一个”进程“代表中计算机中实际跑起来的一个程序在现代操作系统的保护模式下每个进程拥有自己独立的进程地址空间和上下文堆栈。但是就一个程序本身执行的操作来说进程其实什么也不做不执行任何进程代码它只是提供一个大环境容器在进程中实际的执行体是”线程“。wiki百科上给线程的定义是In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system. 计算机科学中线程是操作系统管理的、可以执行编制好的最小单位的指令序列的调度器。翻译的有点拗口通俗地来说线程是进程中实际执行代码的最小单元它由操作系统安排调度何时启动、何时运行和暂停以及何时消亡。进程与线程的区别与关系这里就不再多说了任何一本关于操作系统的书籍都会有详细的介绍。这里需要重点强调的是如下几个问题这也是我们在实际开发中使用多线程需要搞明白的问题。一个进程至少有一个线程上文也说了线程是进程中实际干活的单位因此一个进程至少得有一个线程我们把这个线程称之为”主线程“也就是说一个进程至少要有一个主线程。主线程退出支线程也将退出吗在Windows系统中当一个进程存在多个线程时如果主线程执行结束了那么这个时候即使支线程也可以叫工作线程还没完成相关的代码执行支线程也会退出也就是说主线程一旦退出整个进程也就结束了。之所以强调这一点是很多多线程编程的初学者经常犯在工作线程写了很多逻辑代码但是没有注意到主线程已经提前退出导致这些工作线程的代码来不及执行。解决这一问题的方案很多核心就是让主线程不要退出或者至少在工作线程完成工作之前主线程不要退出。常见的解决方案有主线程启动一个循环或者主线程等待工作线程退出后再退出下文将会详细介绍。在Linux系统中如果主线程退出工作线程一般不会受到影响还会继续运行下去但是此时这个进程就会变成所谓的僵尸进程这是一种不好的做法实际开发中应该避免产生僵尸进程。### ps -ef 命令查看系统进程列表时带有defunct字样的进程即僵尸进程 [rootlocalhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 2 0 0 Jan18 ? 00:00:01 [kthreadd] root 3 2 0 Jan18 ? 00:00:25 [ksoftirqd/0] root 5 2 0 Jan18 ? 00:00:00 [kworker/0:0H] root 60928 1 0 14:48 pts/1 00:00:00 [linuxtid] defunctLinux 版本众多在某些 Linux 版本实现中主线程退出也会导致支线程退出这个行为就和 Windows 上一样了。读者在实际开发时应该以自己的机器测试结果为准。某个线程崩溃会导致进程退出吗这是一个常见的面试题还有一种问法是进程中某个线程崩溃是否会对其他线程造成影响一般来说每个线程都是独立执行的单位每个线程都有自己的上下文堆栈一个线程的的崩溃不会对其他线程造成影响。但是通常情况下一个线程崩溃会产生一个进程内的错误例如在 Linux 操作系统中可能会产生一个Segment Fault错误这个错误会产生一个信号操作系统默认对这个信号的处理就是结束进程整个进程都被销毁了这样的话这个进程中存在的其他线程自然也就不存在了。

相关新闻

最新新闻

Web安全实战:从靶场学习访问控制漏洞与权限提升攻防

Web安全实战:从靶场学习访问控制漏洞与权限提升攻防

1. 项目概述:从靶场实战中理解访问控制的本质在安全测试和渗透学习的路上,我们总会遇到一些听起来很基础,但实际攻防中威力巨大且容易被忽视的漏洞类型。访问控制漏洞,或者说权限提升问题,就是其中的典型代表。它不像S…

2026/8/26 3:45:31
软件测试面试题库:1000道真题解析与实战指南

软件测试面试题库:1000道真题解析与实战指南

1. 项目概述"软件测试常见1000道面试题(答案文档)"这个项目直击软件测试从业者的核心痛点——面试准备。作为在测试行业摸爬滚打多年的老兵,我深知一套全面、系统的面试题库对求职者的价值。这不仅是一份问题清单,更是行…

2026/8/26 3:45:31
软件测试面试20问:从基础到实战全解析

软件测试面试20问:从基础到实战全解析

1. 软件测试面试必备:20个高频问题深度解析 刚入行的测试工程师最头疼的莫过于面试环节——那些看似基础却暗藏玄机的问题,往往决定了能否拿到心仪的offer。作为经历过数十场技术面试的老测试人,我整理了20个最高频的软件测试面试题&#xff…

2026/8/26 3:45:31
MATLAB燃料电池堆性能仿真:三层解耦建模与工程落地实践

MATLAB燃料电池堆性能仿真:三层解耦建模与工程落地实践

1. 这不是跑个仿真那么简单:为什么燃料电池堆性能模拟必须用MATLAB,又为什么很多人跑出来结果“看着像、用不了”你搜“MATLAB 燃料电池堆”,首页跳出来的大多是课程设计报告、毕设模板,或者某篇论文里一句带过的“采用MATLAB/Sim…

2026/8/26 3:45:31
UE5材质大师班(下):从PBR组装到高级贴图与性能优化的完整工作流

UE5材质大师班(下):从PBR组装到高级贴图与性能优化的完整工作流

各位读者朋友大家好。在《(上)UE5 材质大师班》里,我们已经把 PBR 的基础概念、贴图类型、材质编辑器布局和简单材质实例走了一遍。很多同学反馈说“节点都能看懂,但真正做项目时不知道从哪下手”,这其实不是节点的问题…

2026/8/26 3:45:31
AI教学Skill设计:从Prompt工程到工程化落地

AI教学Skill设计:从Prompt工程到工程化落地

在 AI 学习类内容大量泛滥的今天,很多人已经发现一个尴尬的事实:AI 能答对题目,却不一定能教会你。你问它“请解释 TypeScript 泛型”,它可能给出一个完整但看不懂的长篇大论;你让它“教我 Vue 的响应式原理”&#xf…

2026/8/26 3:40:31