多线程入门-并发编程(Java)
发布日期:2022-04-11 08:52:52
浏览次数:9
分类:技术文章
本文共 1586 字,大约阅读时间需要 5 分钟。
文章目录
1、多线程入门
程序:一段静态代码,一组计算机指令的集合,以文件的形式存储在磁盘上。它只是一个静态的实体,是应用软件执行的蓝本。 进程:是程序的一次动态执行,它对应这从代码加载,执行至执行完毕的一个完整过程。是一个动态的实体,有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而处于等待状态,因任务完成而撤销,反应了一个程序在一定的数据集上运行的全部动态过程。通过程序控制快(PCB)唯一标志某个进程。是系统进行资源分配和调度的一个独立单位。
- 程序和进程的区别
状态 | 是否具有资源 | 是否有唯一标志 | 是否具有并发性 | |
---|---|---|---|---|
进程 | 动态 | 有 | 有 | 有 |
程序 | 静态 | 无 | 无 | 无 |
线程:可以理解为进程的多条执行线索,每条线索又对应这各自独立的生命周期。线程是进程的一个实体,是cup调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
- 进程与线程
- 线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。
- 由于线程是被调度的基本单元,而进程不是调度单元。所以,每个进程在创建时,至少需要同时为该进程创建一个线程。即进程中至少要有一个或一个以上的线程,否则该进程无法被调度执行。
- 进程是被分给并拥有资源的基本单元。同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用他们。
- 线程是操作系统中基本调度单元,因此线程中应包含有调度所需要的必要信息,且在生命周期中有状态的变化。
- 由于共享资源【包括数据和文件】,所以线程间需要通信和同步机制,且需要时线程可以创建其他线程,但线程间不存在父子关系。
- 参考文章:
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月03日 13时26分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大话线程的三种使用方式(这个不知道就与BAT无缘了)
2021-06-30
大话线程安全与线程安全的实现方式
2021-06-30
大话JUC核心类LockSupport(通过源码理解LockSupport)
2021-06-30
Nacos源码构建与总览(一起读源码)
2021-06-30
一文道尽分布式的CAP原则
2019-04-27
nacos源码之Auth(权限)模块-1(授权过滤器与控制器缓存)
2019-04-27
nacos源码之Auth(权限)模块-2(权限管理与权限配置)
2019-04-27
这一文道尽JUC的ConcurrentHashMap
2019-04-27
分布式日志追踪的最佳实践1
2019-04-27
运维救火必备:问题排查与系统优化手册(结合惨案现身说法)
2019-04-27
input表单正则表达式表达式去除指定字符
2019-04-27
wireshark-filter
2019-04-27
利用Java程序统计彩票双色球中一等奖究竟有多难
2019-04-27
利用Java程序分析福彩3D
2019-04-27
ping服务器间歇性丢包的解决方案
2019-04-27
容易被替代的几类程序员总结
2019-04-27
银河麒麟root用户登录方法
2019-04-27