iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
Software Development

30天手把手帶你跟JAVA變成好朋友 系列 第 29

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


上一篇
Day28 - Java常見面試考題
下一篇
Day30 - 鐵人賽總回顧
系列文
30天手把手帶你跟JAVA變成好朋友 30

尚未有邦友留言

立即登入留言