线程、并发中的基本概念

知识图谱https://naotu.baidu.com/file/b8a70ff9e7f3af1437594b2d0fb4ebfd?token=11150672c00909cb

Java 知识目录

线程、进程

基本概念

进程是程序的真正运行的实例,是资源分配的基本单位
线程是CPU的基本调度单位,每个线程执行的进程代码的某个片段

线程、进程关系与区别

关系

操作系统中可以包含多个进程,每个进程可以包含多个线程

区别
  • 起源:先有线程后有进程
  • 概念
  • 内存共享方式:默认情况下,内存无法与其他进程共享。线程共享 由系统分配给父进程的内存块
  • 拥有资源
    • 进程拥有独立的内存,而线程只拥有在运行中必不可少的资源,但他可以与同进程下的线程分享进程拥有的全部资源
    • 线程共享的内容:比如进程的代码块
    • 线程独立的内容:比如线程的堆栈
  • 数量:一个程序至少有一个进程,一个进程至少有一个线程
  • 开销
    • 线程的创建时间比进程短
    • 同一进程内的线程切换时间比进程短
    • 同一进程内的线程共享内存和文件资源,可以不通过内核进行通信
相同点

运行状态:就绪、等待、运行等

Java 与 多线程的关系

  • Java 天生支持多线程
  • Java 线程会一对一映射到操作系统
  • JVM自动启动线程

多线程

什么是多线程

多线程指单个进程中运行多个线程,如果一个程序允许运行多个线程,那么他就是多线程程序

为什么使用多线程

  • 提高CPU利用率
    • 提高处理速度
    • 避免无效等待
    • 提高用户体验:避免卡顿,缩短等待时间:比如 tomact,同时接收多个请求
  • 便于编程建模
  • 计算机性能定律:阿姆达尔定律
    一般情况下,处理器越多,程序的执行速度就越快,但是会有一个上限,上限取决于程序中串行的比例。并行越多,多处理器效果越明显。

什么场景会使用到多线程

  • 什么时候开启:通常在需要进行耗时任务时开始,比如IO读写,或从网络获取信息
  • 为了同时做多种不同的事情:
  • 为了提高工作效率:tomactNIO
  • 获取高并发量:压测

多线程的局限

  • 上下文切换带来的损耗
  • 异构化任务很难高效并行
  • 线程安全问题:死锁

串行、并行、并发

  • **串行:**单线程,多个任务,顺序执行
  • **并行:**多线程,多个任务,同时执行
  • **并发:**可单线程,也可多线程。只要保证一段时间内只有一个任务执行即可。
  • **并发性:**程序的不同部分可以无序的同时执行,且不影响最终结果
  • 并行必定可以并发,

多线程、高并发

  • **高并发:**高并发是用户访问量剧增导致的一种状态
  • 多线程是高并发的一种解决方案。
  • 高并发不一定需要多线程处理,Redis 底层单核也可以处理

同步异步、阻塞非阻塞

  • 访问者为客户端,被访问者为服务器为例
  • 同步异步是服务器的行为
  • 阻塞非阻塞是客户端的行为
  • **同步:**客户端发出一个请求后,在没有得到结果之前,服务端不返回任何结果。但一旦返回就是客户端想要的结果
  • **异步:**请求发出后,服务器立即返回信息表示接收到请求,然后服务器会处理请求,得到结果后再返回。在此期间,客户端可以进行其他操作。
  • **阻塞/非阻塞:**客户端发出请求,在请求结果返回前,客户端是否进行其他操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章