线程的发展史-1

55 阅读2分钟

一. 进程,线程的历史

1. 单进程人工切换
  • 纸带机
2. 多进程批处理
  • 多个任务批量执行
3. 多进程并行处理
  • 把程序写在不同的内存位置上来回切换
4. 多线程
  • 一个程序内部不同任务来回的切换 (线程的概念)
  • selector -> epoll (内核层面升级,多路复用)
5. 纤程/协程
  • 绿色线程,用户管理的(而不是OS管理的)线程。

二. 程序,进程,线程,纤程区别

1. 程序
概述:可执行文件,如.exe等;
2. 进程
概述:OS操作系统进行的资源分配(资源的基本单位);
流程:
1. 某个app通过操作系统分配;
2. IO总线拿到app搭建Bridge,再将app通过内存总线进行数据传输到内存中;
3. 内存拿到app,就将它作为一个进程存储在内存中,执行主函数Main给到CPU;
3. 线程
概述:一个进程的执行基本单位;
4. 纤程/协程
概述:一个线程的执行基本单位;

三. 线程的6种状态

1. new (新建线程,未启动)
2. runnable(可运行状态,线程执行器可调度)
3. waiting(等待被唤醒,wait,notify, lock,unlock)
4. timed waiting(超时等待 sleep,wait)
5. blocked (阻塞 线程阻塞,正在等待锁,只有在synchronized-等待进入同步代码块)
6. terminated (线程结束 当前线程)
线程结束方法:
  1. stop - 已经弃用,不建议使用,操作粗暴,容易产生数据一致性问题。使用:thread.stop();
  2. 方式二 suspend(暂停) / resume(恢复执行) - 已经弃用,此方法已被弃用,因为它天生容易死锁。如果目标线程在暂停时对保护关键系统资源的监视器持有锁,则在目标线程恢复之前,没有线程可以访问该资源。
  3. 方式三 使用 volatile 定义一个执行次数的变量去控制线程的结束手工设置标记位,缺点不能精准控制关闭时机。
  4. 方式四 方法四 interrupt(打断) / interrupted(当前线程是否被打断) (打断) 设置标记位置与 volatile 相似,将线程设置成打断标记,之后线程去检查是否存在线程如果存在便将其线程结束。