誰かが私に説明できますか、アトミック操作とアトミックトランザクションの違いは何ですか?この2つは同じもののように思えますが、正しいですか?
3 に答える
Atomicityの概念は、アトミックトランザクションとアトミック操作の間で一般的ですが、通常、それらは異なるドメインに関連しています。
アトミックトランザクションは、一連のアクションがすべて完了する必要があるデータベース操作に関連付けられているか、そうでない場合はいずれも完了しない必要があります。たとえば、誰かがフライトを予約している場合、支払いを受け取り、座席を予約するか、どちらもしないようにします。どちらか一方が成功せずにもう一方も成功することが許可された場合、データベースは不整合になります。
一方、不可分操作は通常、マルチプロセッシングまたはマルチスレッドアプリケーションに関する低レベルのプログラミングに関連付けられており、クリティカルセクションに似ています。たとえば、2つのスレッドが同じ変数にアクセスして変更する場合、各スレッドは次の手順を実行します。
- 変数をストレージからローカルメモリに読み込みます。
- ローカルメモリの値を変更します。
- 変更した値を元の保存場所に書き戻します。
ただし、マルチスレッドシステムでは、最初のプロセスが値を読み取ったが書き戻しなかった後に、割り込みまたはその他のコンテキストスイッチが発生する可能性があります。次に、2番目のプロセス(または割り込み)は、OLD値を読み取って変更し、変更された値をストレージに書き戻します。最初のプロセスが再度有効になると、何かが変更された可能性があることがわからないため、変更を元の値に書き戻します。したがって、2番目のプロセスが変数に対して行った操作は失われます。操作がアトミックである場合、操作が開始されると中断されることなく完了することが保証されます。これは通常、テストアンドセットやコンペアアンドスワップなどのハードウェアレベルのプリミティブを使用して実現されます。
より広い視野を得るには、以下をご覧ください。
上記のリソースからの引用:
データベースについて:
アトミックトランザクションでは、一連のデータベース操作がすべて発生するか、何も発生しません。原子性を保証することで、データベースの更新が部分的にのみ発生するのを防ぎます。これにより、シリーズ全体を完全に拒否するよりも大きな問題が発生する可能性があります。言い換えれば、原子性は不可分性と還元不可能性を意味します。
プログラミングについて:
並行プログラミングでは、操作(または操作のセット)は、システムの他の部分に瞬時に発生するように見える場合、アトミック、線形化可能、分割不可能、または中断不可能です。原子性は、並行プロセスからの分離を保証します。さらに、アトミック操作には通常、成功または失敗の定義があります。システムの状態を正常に変更するか、明らかな影響はありません。
トランザクションという言葉は、データベースやプログラミング、特にカーネルレベルのプログラミングでの操作によく使用されます。
ステートメントの場合:アトミックトランザクションは、必要な手順を実行するための最小の操作セットです。これらの必要な操作がすべて(成功して)発生するか、アトミックトランザクションが失敗します。
アトミック操作は通常、トランザクションとは何の共通点もありません。私の知る限り、これはハードウェアプログラミングに由来し、一連の操作(または1つ)がたまたますぐに解決されます。