实时更新
什么是线程?
- 任务调度和执行的基本单位,程序使用 CPU 的最基本单位
- 一个进程可以有多个线程
什么是进程?
操作系统资源分配的基本单位,也是一个正在运行的应用程序
什么是多线程?
同一程序中有多个任务同时在执行,比如在 qq 中,同时有多个聊天框在聊天
什么是多进程?
操作系统同时运行多个应用程序,比如 qq、微信、浏览器等等
线程和进程的区别?
| 比较点 | 线程 | 进程 |
| 内存 | 线程间共享进程的内存 | 进程间不共享内存 |
| 资源 | 线程间共享进程的资源 | 进程间共享文件、网络资源等 |
| 开销 | 进程需要分配内存,还要上下文切换,开销较大 | 只需要分配栈和一个PC,开销较小 |
| 独立 | 不能独立,需要依赖进程 | 进程是独立存在的 |
| 作用 | 线程是CPU调度的最小单位 | 资源分配的最小单位 |
线程有什么状态?
- 初始状态:新建一个线程
- 可运行状态:线程调用 start() 方法,等待获取 CPU 的使用权
- 运行状态:线程获得 CPU 的使用权,执行程序代码
- 阻塞状态:放弃 CPU 的使用权,暂停运行,直到变回可运行状态
- 死亡状态:线程执行完或因异常退出运行,该线程的生命周期已结束
线程调度策略有哪几个?
- 分时调度:所有线程轮流占用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片
- 抢占式调度:优先让优先级高的线程使用 CPU ,获取 CPU 时间片也越多,Java 就是使用此策略
线程同步的方式有哪些?
- 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
- 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
- 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
进程有哪几种状态?
- 就绪状态:进程已获得除 CPU 以外的所需资源,等待分配 CPU 资源
- 运行状态:占用 CPU 资源运行,处于此状态的进程数小于等于 CPU 数
- 阻塞状态:进程等待某种条件,在条件满足之前无法执行
进程通信的方式有哪些?
- 管道
- 系统IPC(包括消息队列、信号量、共享存储)
- SOCKET
管道主要分为
- 普通管道
- 流管道
- 命名管道
进程同步有哪几种机制?
- 原子操作
- 信号量机制
- 自旋锁管程
- 会合
- 分布式系统
进程调度策略有哪几种?
- FCFS(先来先服务)
- 优先级
- 时间片轮转
- 多级反馈
什么是死锁?
在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。
产生死锁的原因
- 竞争系统资源
- 进程的推进顺序不当
产生死锁的必要条件?
- 互斥条件:一个资源一次只能被一个进程使用
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
- 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
- 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系
什么是缓冲区溢出?有什么危害?原因是什么?
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害有以下两点:
- 程序崩溃,导致拒绝额服务
- 跳转并且执行一段恶意代码
造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
















