한 줄 정의

비직렬 스케줄은 여러 트랜잭션이
하나의 시간축을 나눠 쓰며 연산을 교차 실행하는 방식입니다.

섞이는 것은 실행 시점이고, 깨지면 안 되는 것은 각 트랜잭션 내부의 읽기/쓰기 순서입니다.

T1 내부 순서

T1은 중간에 끼어들어도 자기 순서는 유지됩니다.

다른 트랜잭션이 사이에 들어와도, T1 안에서는 정의된 순서가 바뀌지 않습니다.

1R(A)
2W(A)
3R(B)
4W(B)
공유 시간축

연산은 한 줄로 섞여 보이지만, 실제로는 번갈아 배치됩니다.

왼쪽 → 오른쪽

아래는 앞부분만 뽑은 예시 인터리빙입니다. 핵심은 트랜잭션 전체를 통째로 바꾸는 것이 아니라, 각 연산을 가능한 시점에 끼워 넣는 데 있습니다.

T1 R(A)
T2 R(A)
T1 W(A)
T2 W(A)
T1 R(B)
T2 R(B)
섞이는 대상
T1과 T2 사이의 실행 위치
유지되는 대상
각 트랜잭션 안의 연산 순서
다음 결과
빈 대기 구간을 다른 트랜잭션이 사용
T2 내부 순서

T2도 같은 규칙을 따르므로 교차 실행이 가능해집니다.

중요한 것은 “섞여도 된다”가 아니라 “섞여도 내부 규칙은 그대로다”라는 점입니다.

1R(A)
2W(A)
3R(B)
4W(B)
비직렬 스케줄이 보여주는 것

트랜잭션은 동시에 실행되더라도, 각자 정의된 작업 순서를 잃지 않은 채 같은 자원을 나눠 쓸 수 있습니다.

이 다음 단계에서 따져야 할 것

이런 교차 실행이 항상 안전한 것은 아니므로, 다음 예시에서는 어떤 인터리빙이 올바른 결과를 깨뜨리는지 확인하게 됩니다.