软件构造知识点复习:debugging+并发

代码调试(debugging)

Debug的方式

{ 边 写 边 d e b u g 写 完 再 d e b u g \left\{ \begin{array}{c} 边写边debug \\ 写完再debug\end{array}\right. {debugdebug

诊断

{ I n s t r u m e n t a t i o n : S y s t e m . o u t . p r i n t , l o g g i n g D i v i d e a n d C o n q u e r : 一 块 一 块 运 行 S l i c i n g : 缩 小 查 找 的 范 围 , 找 和 错 误 相 关 的 代 码 , 倒 退 F o c u s o n d i f f e r e n c e : 找 每 次 提 交 的 差 异 S y m b o l i c D e b u g g i n g : 用 于 学 术 上 , 输 入 符 号 值 → 符 号 表 达 式 D e b u g g e r L e a r n F r o m O t h e r \left\{ \begin{array}{c} Instrumentation:System.out.print,logging \\ Divide and Conquer:一块一块运行 \\ Slicing:缩小查找的范围,找和错误相关的代码,倒退\\ Focus on difference:找每次提交的差异\\ Symbolic Debugging:用于学术上,输入符号值→符号表达式\\ Debugger\\ Learn From Other\end{array}\right. InstrumentationSystem.out.printloggingDivideandConquerSlicing退FocusondifferenceSymbolicDebuggingDebuggerLearnFromOther

工具

logging

并发

2种并行模式:
{ 共 享 内 存 消 息 传 递 \left\{ \begin{array}{c} 共享内存\\ 消息传递\end{array}\right. {
{ 进 程 ( P r o c e s s ) : 私 有 空 间 , 彼 此 隔 离 线 程 ( T h r e a d ) : 程 序 内 部 的 控 制 机 制 \left\{ \begin{array}{c} 进程(Process):私有空间,彼此隔离\\ 线程(Thread):程序内部的控制机制\end{array}\right. {(Process)线(Thread)

进程

  • 拥有计算机的所有资源
  • 多进程间不共享内存→用消息传递
  • 进程=程序=应用
  • 一个应用可以有多个进程
  • OS支持进程间通信:不仅限于本机,也可以是不同机器间
  • JAVA虚拟机(JVM)通常为单一进程(也可以是多个:ProcessBuilder)

线程

在这里插入图片描述

  • 进程内的小程序
  • 进程=虚拟机,线程=虚拟CPU
  • 一个线程可分出多个
    在这里插入图片描述
  • 共享进程资源:内存
  • 难以获得现成的私有内存,但线程有自己的堆栈
  • 线程的协调需要代价
  • 每个应用至少一个线程(主线程,自动创建的)
  • 主线程可以创建其他的线程:接口,Runnable
    在这里插入图片描述
    学过的-able:
    { C o m p a r a b l e / C o m p a r a t o r I t e r a b l e / I t e r a t o r O b s e r v a b l e / O b e s r v e r T h r o w a b l e R u n n a b l e \left\{ \begin{array}{c} Comparable/Comparator \\ Iterable/Iterator \\ Observable/Obesrver\\ Throwable\\ Runnable\end{array}\right. Comparable/ComparatorIterable/IteratorObservable/ObesrverThrowableRunnable
    在这里插入图片描述
    Thread应该start而非run,不能start→Runnable

交错竞争

  • 一个核的每一时刻只能执行一个线程
  • 时间分片→多进程/多线程共享处理:OS自动调度
  • 一般,多核的线程/进程数也多于核数
  • 时间交错
  • 外围的发布访问慢
  • Thread.sleep():自己暂停
  • Thread.interrupt():其他线程请求(不一定答应,sleep时才会答应)
  • Thread.isinterrupt():检测是否暂停
  • Thread.yield():自己放弃占用
  • Thread.join()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值