如需转载,请根据 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 许可,附上本文作者及链接。
本文作者: 执笔成念
作者昵称: zbcn
本文链接: https://1363653611.github.io/zbcn.github.io/2019/12/10/concurrency_01%20-%20%E7%AE%80%E4%BB%8B/
concurrency - 简介
I . 简介
A . 早期的计算机不包含操作系统,他们从头到尾只执行一个程序,并且这个程序能访问计算机中的所有资源
B . 操作系统的出现使得计算机每次能运行多个程序,并且不同的程序在单独的进程中运行
C . 操作系统的作用
C.A 为各个独立执行的进程分配各种资源
- 内存
- 文件句柄
- 安全证书
- 。。。
C.B 不同进程之间通过一些粗粒度的通讯机制来交换数据
- 套接字
- 信号处理器
- 共享内存
- 信号量
- 文件
D . 多个进程同时执行的特点
- D.A 资源利用率
- D.B 公平性(粗粒度的时间分片 Time Slicing)
- D.C 便利性
E . 冯.诺依曼计算机 - E.A 组成
- 存储指令
- 数据的存储空间
- E.B 执行方式
- 根据机器语言的语义以串行方式执行指令,并通过一组I/O指令与外部设备通信
- 程序的控制流是按照指令集的规则来确定的
- 每一条指令,都有相应的”下一条指令”
II . 线程的优势
A 总述
- A.A 有效的降低程序的开发成本和维护成本
- A.B 提升复杂应用程序的性能
B 发挥多处理器的强大性能
C 建模的简单性
- C.A 如果程序中只包含一种类型的任务,那么比包含多种不同类型任务的程序要更易于编写,错误更少,也更容易测试
D 异步事件的简单处理
E 响应更灵敏的用户界面
III . 线程带来的风险
A . 安全性问题:永远不会发生最糟糕的事情
- A.A value++;包含3个独立的操作:去读value、将value加1,将计算的结果写入value
B . 活跃性问题:某件正确的事情最终会发生
- B.A 死锁
- 伸缩性较低
C . 性能问题:
C.A 具体问题
- 服务时间过长
- 资源消耗过高
- 响应不灵敏
- 吞吐量太低
C.B 诱引
- 上下文切换产生的线程调度
- 同步机制会抑制某些编译器的优化
IV . 线程无处不在
A . 位置
- A.A JVM启动时,将为JVM内部任务(垃圾收集、终结操作等) 建立后台线程,并创建主线程来运行main方法
- A.B AWT(abstract window toolkit) 和swing 的用户界面框架将创建线程来管理用户界面事件
- A.C Timer将创建线程来执行延时任务
- A.D 一些z组建(servlet /RMI)都会创建线程池并调用这些线程池中的方法
B . 远程方法调用RMI
B.A 正确地协同在多个对象中共享的状态
B.B 对远程RMI对象本身状态的访问