面试题--进程和线程

1、操作系统特点:并发性,共享型,虚拟性和不确定性

2、什么是进程:

  • 进程是指正在运行的一个应用程序,程序一旦运行就是进程
  • 进程是系统进行资源分配的最小单位,每个进程拥有独立的地址空间。
  • 一个进程无法直接去访问另外一个进程的变量和数据结构,需要使用进程间通信,包括管程,消息队列
  • 线程是进程的一个实体,是资源调度的基本单位。

3、进程和线程的区别:

  • 同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间
  • 同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的
  • 一个进程崩溃后,在保护模式下不会对其它进程产生影响,但是一个线程崩溃后,整个进程崩溃
  • 进程切换,消耗资源大,线程切换时间少于进程
  • 两者均可以并发执行

4、死锁是什么?必要条件是什么?怎么避免?

  • 死锁是指多个进程循环等待它方占有的资源而无限期僵持下去的局面。当两个或两个以上的进程同时对多个互斥资源提出使用要求时,有可能导致死锁。
  • 互斥条件:即一次只有一个进程可以使用资源,其它进程不能访问已经分配给其它进程的资源
  • 占有且等待:一个进程等待其它进程释放资源的时候,它已知占有这个资源
  • 不可抢占:其它进程不能强行占用已经分配给进程的资源
  • 循环等待:存在一个闭合链,链中的进程至少占据链中下一个进程的所需的一个资源

死锁避免:

  • 预防互斥:不可能禁止
  • 预防占有且等待:让进程一次性申请完所有的资源。
  • 预防不可抢占:(1)当占有资源的进程进一步申请资源的时候,拒绝,然后强制释放当前占用的资源。必要时可再申请。(2)当一个进程请求被另外一个进程所占据的资源的时候,操作系统可以抢占这个占据资源的进程。要求释放资源。第二种方案只有在任意两个进程优先级不同的情况下.
  • 预防循环等待:定义资源访问线性序列

转载于:https://www.cnblogs.com/tingweichen/p/10659777.html

### 线程进程的区别 线程进程是计算机科学中两个重要的概念,尤其是在多任务处理并发编程领域。以下是它们的主要区别: #### 定义 - **进程**是指操作系统分配资源的基本单位,是一个程序的执行实例[^3]。 - **线程**是进程内部的一个执行单元,也是 CPU 调度的基本单位。 #### 资源占用 - 每个进程都有独立的内存空间(包括代码区、数据区、堆栈等),因此其资源开销较大。 - 线程共享所属进程的内存空间其他资源,仅拥有自己独立的栈段,所以资源开销较小[^4]。 #### 独立- 进程之间相互独立,一个进程崩溃通常不会影响到其他进程- 线程共享同一进程的资源,如果某个线程发生错误,则可能会导致整个进程崩溃[^3]。 #### 通信方式 - 进程间的通信较为复杂,常见的方法包括管道、消息队列、信号量以及共享内存等方式。 - 线程之间的通信相对简单,可以通过直接访问共享变量来实现交互[^3]。 #### 创建切换成本 - 创建一个新的进程需要复制父进程的部分状态,并为其分配新的内存区域,这使得进程创建的成本较高;同样,在不同进程间进行上下文切换也需要更多的时间。 - 对于线程而言,由于它只维护少量的状态信息并且可以重用所在进程已存在的环境,因而无论是启动还是转换都更加高效。 #### 并发特性 - 多个不同的进程能够同时运行在各自的地址空间里完成各自的任务,适用于大规模分布式计算场景下的多任务协作模式[^3]。 - 单个进程中通过开启若干条路径即线程可让应用程序内部的不同部分并行工作起来,提高单一应用性能效率的同时保持较低管理代价。 ```python import os from multiprocessing import Process, current_process from threading import Thread, current_thread def process_task(): print(f'Process ID: {os.getpid()}') def thread_task(): print(f'Thread Name: {current_thread().name}') if __name__ == '__main__': processes = [] threads = [] for _ in range(2): p = Process(target=process_task) t = Thread(target=thread_task) processes.append(p) threads.append(t) for p in processes: p.start() for t in threads: t.start() for p in processes: p.join() for t in threads: t.join() ``` 以上代码展示了如何分别利用Python标准库中的`multiprocessing.Process`类创建子进程以及借助`threading.Thread`对象构建新线程来进行基本的操作演示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值