Sobes.tech
Middle+

Czym jest spójność sekwencyjna?

sobes.tech AI

Odpowiedź od AI

Sejowa spójność (Sequential Consistency) to model spójności w systemach rozproszonych lub programach wielowątkowych, gwarantujący, że wynik wykonania dowolnego programu równoległego będzie taki, jakby wszystkie operacje wszystkich procesorów (wątków) zostały wykonane w określonym porządku sekwencyjnym, a operacje każdego pojedynczego procesora (wątku) w tym porządku sekwencyjnym następowały w kolejności, w jakiej zostały zadeklarowane w programie.

Inaczej mówiąc:

  1. Zachowanie kolejności operacji w obrębie wątku: Operacje inicjowane przez jeden wątek są widoczne dla innych wątków w tej samej kolejności, w jakiej zostały wykonane przez ten wątek.
  2. Jedna, globalna kolejność: Istnieje jedna, liniowa, globalna kolejność wykonywania wszystkich operacji wszystkich wątków, którą respektują wszystkie wątki.

Ten model jest jednym z najsilniejszych i najbardziej intuicyjnych, ale jego implementacja może być kosztowna pod względem wydajności ze względu na konieczność synchronizacji i zapobiegania przearanżowaniu operacji przez kompilator i sprzęt.

Przykład:

// Wątek 1
x = 1;
y = 2;

// Wątek 2
// Operacje odczytu x i y

Przy sekwencyjnej spójności, jeśli Wątek 1 najpierw zapisze 1 do x, a następnie 2 do y, to Wątek 2 nigdy nie "zobaczy" y równego 2 przed zobaczeniem x równego 1. Możliwe sekwencyjne wykonania:

  • x = 1; y = 2; read(x); read(y); (read(x) = 1, read(y) = 2)
  • x = 1; read(x); y = 2; read(y); (read(x) = 1, read(y) = 2)
  • read(x); x = 1; read(y); y = 2; (read(x) może być 0, read(y) może być 0, potem read(x) = 1, read(y) = 2)

Nie jest możliwe, aby Wątek 2 zobaczył y jako 2, ale x nadal było 0, jeśli Wątek 1 najpierw zapisze x = 1, a potem y = 2.