[面试问题] 进程与线程、多线程之间的区别
关于流程和线程之间区别的面试问题
~~ 我还在写这篇文章!~~ >~23.
23. 05. 30. 写作完成→ 23. 06. 09. 添加内容
计划
为计算机执行特定任务而编写的一组可执行指令。
它有许多不同的定义,但我在阅读时是这样理解的!我之所以先检查程序的定义,是因为进程的定义是一个范围较窄的程序。
流程
- '运行中'的程序的'实例' (几乎可与任务互换使用)
在内存中运行的基于操作系统的工作单元
耗费大量时间和资源来创建(高开销)
我认为有特点的部分是,可以同时拥有一个程序的多个实例,而不是程序本身。
线程
- 在进程中执行工作的基于 CPU 的执行单元。
所有处理器都至少有一个线程
线程有自己的寄存器和堆栈
堆内存空间是共享的
那么两者之间有什么区别呢?
进程可被视为一个更大的分类单元
不过,我想如果我就这么简单地回答,那就太全面了,所以我参考了一些条理清晰的文章,补充说明了一些问题!
工作原理
1. 对于流程
-
进程运行时,操作系统会为其分配一个单独的内存区域。
-
内存区域的格式如下:代码/数据/堆栈/Heap
-
不能访问其他进程的内存区域
2. 对于线程
-
进程的堆栈区域被分割并拥有自己的区域
-
代码区、数据区和堆区的其余部分是共享的
一个进程的错误不会扩散到其他进程的区域
- 但如果一个线程失败,所有线程都会终止。 → 因为它们共享内存区域
摘要
进程(Process)和线程(Thread)有什么区别?
-
进程是动态使用的程序,线程是任务的执行单位,但概念不同。
-
一个进程至少包含一个线程
-
进程通常不共享内存空间,但线程可以
-
进程在每次出错时都会单独宕机,而线程则会在同一进程内全部宕机
***]
+ 关于多线程
在一个进程中同时运行多个线程。
上下文切换(上下文切换)
默认情况下,可同时处理的最大任务数为内核数。 如果运行的线程数多于内核数,则每个内核会交替执行多个任务。 线程切换时,会保存并读取任务的当前状态或下一个任务所需的数据。
多线程和进程的优缺点
1) 多线程的优点
-
创建进程和分配资源的系统调用处于休眠状态,可有效管理资源。
-
线程之间发送和接收数据的处理成本较低,因为除堆栈外,它们在一个进程内共享内存空间。
-
由于线程之间的通信方法不那么复杂,程序响应时间缩短。
2) 多线程的缺点
-
增加调试难度和设计难度
-
其他进程线程的不可控性
-
内存共享(同时访问相同资源)导致的同步问题
-
一个线程的问题会影响整个进程
3) 多进程的优势
- 如果一个进程出现问题,其影响不会扩散到该进程之外
4) 多进程的缺点
-
上下文交换开销大
-
进程间通信比线程间通信更加困难和复杂
注意
댓글 작성
게시글에 대한 의견을 남겨 주세요.