Day29 - 重要观念: 死结与DB transaction

上一篇中整理了一些面试中常被问到的技术问题,其中我觉得两个比较重要的就属死结(deadlock)与DB Transaction了。

首先是死结。
来看一下维基百科上的定义-
当两个以上的运算单元,双方都在等待对方停止执行,以取得系统资源,但是没有一方提前退出时,就称为死结。在多工作业系统中,作业系统为了协调不同行程,能否取得系统资源时,为了让系统运作,必须要解决这个问题。

而达成死结,需有以下四个条件:

  • 禁止抢夺资源(no preemption):系统资源不能被强制从一个行程中退出。
  • 持有和等待(hold and wait):一个行程可以在等待时持有系统资源。
  • 互斥(mutual exclusion):资源只能同时分配给一个行程,无法多个行程共享。
  • 循环等待(circular waiting):一系列行程互相持有其他行程所需要的资源。

死结只有在四个条件同时满足时发生,预防死结必须至少破坏其中一项。
以下是我画的一张图,相信可以帮助你更了解死结。
https://ithelp.ithome.com.tw/upload/images/20201012/201289254stSThMk7N.png

而第二个观念为DB transaction:
Transaction顾名思义,他把资料库的每一笔query或动作当成是一笔笔交易一样,若前一个交易还没完成,下一笔交易就不能执行,而当前一笔交易出错,下一笔交易同样不会执行,且出错同时,会rollback回最初的状态。

https://ithelp.ithome.com.tw/upload/images/20201012/20128925WNAOQcxWEs.png


<<:  [Day27]Flutter Netflix UI 使用json_serializable转换Model

>>:  op.27 《全领域》-全域开发实战 - 居家植物盆栽 Mvt II (C# Broker & Mysql)

【D3】建立MySQL资料库

前言 首先把之前做的资料库格式搬家,也就是取得每日的股票之交易资讯进入资料库,首先要做的就是建立资料...

Day11-415. Add Strings

今日第一题:415. Add Strings Given two non-negative inte...

笔记:好用HTML5 的表单input元件及属性

html的form标签之input小记录 前言本篇是上课中所提及好用,但是笔者小新手之前未发现的上课...

Day 3 - 条件式

条件式就是小学常写的造样造句:如果...就(否则)...的概念。 这边会介绍几种常用的条件式语句 i...

RDS Deadlock

有Transaction就有可能会发生Deadlock. 在RDS上发生的时候就可从LOG里看出发生...