多线程入门-并发编程(Java)
发布日期:2022-04-11 08:52:52 浏览次数:9 分类:技术文章

本文共 1586 字,大约阅读时间需要 5 分钟。

文章目录

1、多线程入门

程序:一段静态代码,一组计算机指令的集合,以文件的形式存储在磁盘上。它只是一个静态的实体,是应用软件执行的蓝本。
进程:是程序的一次动态执行,它对应这从代码加载,执行至执行完毕的一个完整过程。是一个动态的实体,有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而处于等待状态,因任务完成而撤销,反应了一个程序在一定的数据集上运行的全部动态过程。通过程序控制快(PCB)唯一标志某个进程。是系统进行资源分配和调度的一个独立单位。
  • 程序和进程的区别
状态 是否具有资源 是否有唯一标志 是否具有并发性
进程 动态
程序 静态
线程:可以理解为进程的多条执行线索,每条线索又对应这各自独立的生命周期。线程是进程的一个实体,是cup调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 进程与线程
  1. 线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
  2. 由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
  3. 进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
  4. 线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
  5. 由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
  • 参考文章:

2、串行、并发和并行

并行和串行:

  • 串行:一次只能取得一个任务并执行这一个任务
  • 并行:可以同时通过多进程/多线程的方式取得多个任务,并以多进程或多线程的方式同时执行这些任务
  • 注意点:
    • 如果是单进程/单线程的并行,那么效率比串行更差
    • 如果只有单核CPU,多进程并行并没有提高效率
    • 从任务队列上看,由于同时从队列中取得多个任务并执行,相当于将一个长任务队列变成了短队列

并发:

  • 并发是一种现象:同时运行多个程序或多个任务需要被处理的现象
  • 这些任务可能是并行执行的,也可能是串行执行的,和CPU核心数无关,是操作系统进程调度和CPU上下文切换达到的结果
  • 解决大并发的一个思路是将大任务分解成多个小任务:
    • 可能要使用一些数据结构来避免切分成多个小任务带来的问题
    • 可以多进程/多线程并行的方式去执行这些小任务达到高效率
    • 或者以单进程/单线程配合多路复用执行这些小任务来达到高效率

参考地址:

3、同步和异步

同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用

4、阻塞和非阻塞

强调的是程序在等待调用结果(消息,返回值)时的状态. 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 对于同步调用来说,很多时候当前线程还是激活的状态,只是从逻辑上当前函数没有返回而已,即同步等待时什么都不干,白白占用着资源。

参考地址:

欢迎交流,本人 QQ: 806797785

源代码地址:https://gitee.com/gaogzhen/concurrent.git

欢迎交流,本人 QQ: 806797785

源代码地址:https://gitee.com/gaogzhen/concurrent.git

转载地址:https://blog.csdn.net/gaogzhen/article/details/118943815 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:多线程入门01 —— 新线程创建方法
下一篇:多线程入门

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月03日 13时26分00秒