A. 編程,'原子性'是什麼意思
原子性 應梁李該是 最小的單位的意思。
也就是某個操作要麼成功, 要麼失敗, 不能成功一半,失敗一半的。
舉個例子:
A想要從自己的帳戶中轉1000塊錢到B的帳戶里。那個從A開始轉帳,到轉帳結束的這一個過程,稱之為一個事務。在這個事務里,要做如下操作:
1. 從A的帳戶中減去1000塊錢物頌。如果A的帳戶原來有3000塊錢,現在就變成2000塊錢了。
2. 在B的帳戶里加1000塊錢。如果B的帳戶如果原來有2000塊錢,現在則變成3000塊錢了。
如果在A的帳戶已經減去了1000塊錢的時候,忽然發生了意外,比如停電什麼的,導致轉帳事務意外終止了,而此時B的帳戶里還沒有增加1000塊錢。那麼,我們稱這個操作失敗了,要進行回滾。回滾就是回到事務開始之前的狀態,也就是回到A的帳戶還沒減1000塊的狀態,B的帳戶的原來的狀態。此時A的帳戶仍然有3000塊,B的帳戶仍然有2000塊。
我們把這種要麼一起成功(A帳戶成功減少1000,同時B帳戶成功增加1000),要麼一起失敗(A帳戶回到原來狀態,B帳戶也回到原來狀態)的操作叫原子性操作。
如果把一個事務可看作是一個程序,它要麼完整的被執行罩渣鄭,要麼完全不執行。這種特性就叫原子性
B. 原子性是什麼意思 原子性意思是什麼
1、原子操作是不可分割的,在執行完畢不會被任何其它任務或事件中斷。在單處理渣碰橘器系統(UniProcessor)中,能夠在單條指令中完成的操作都可以認為是「原子操作」,因為中斷只能發生於指令之間。這也是某些CPU指令系統中引入了test_and_set、test_and_clear等指令用於臨界資源互斥的原因。
2、在對稱多處理器(SymmetricMulti-Processor)結構中就不同了,由於系統中有多個處理器在獨立地運行,即使能在單條指令中完成的操作也有可能受到干擾。
3、在x86平台上,CPU提供了在指令執行期間對匯流排加鎖的手段。CPU晶元上有一條引線#HLOCKpin,如果匯編語言的程序中在一條指令前面加上前綴LOCK,經過匯編以後的機器代碼就使CPU在執行如團這條指令的時候把#HLOCKpin的電位拉低,持續到這條指令結束時放開,從而把匯流排鎖住,這樣同一匯流排上別的CPU就暫時不能通過匯流排訪問內存了,保證了這條指令在多吵渣處理器環境中的原子性。簡單來講:cpu是一條一條指令執行:如果讀、寫:則是兩條指令,在並發情況下可能出問題原子性則是一條指令,完成讀寫操作。
C. 什麼是程序的原子性
程序的原子性指:整個程序中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。
原子性操作:原子性在一個操作是不可中斷的,要麼全部執行成功要麼全部執行失敗,有著「同生共死」的感覺。及時在多個線程一起執行的時候,一個操作一旦開始,就不會被其他線程所干擾。
redis的原子性:
Redis所有單個命令的執行都是原子性的,這與它的單線程機制有關;
Redis命令的原子性使得我們不用考慮並發問題,可以方便的利用原子性自增操作 實現簡單計數器功能;
redis 實現事務的原理:
批量操作在發送 EXEC 命令前被放入隊列緩存
收到 EXEC 命令後進入事務執行,事務中任意命令執行失敗,其餘的命令都不會被執行
在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中