원자성(Atomic)
CPU는 우리가 짠대로 번역하지 않는다.

a = b + 1
을 실행 시키고 b = 1
을 실행 시키는 것이 아니라 CPU 파이프라이닝에 맞게 코드를 어셈블리화 시킨다!CPU 파이프라이닝

위 처럼 기계가 3대(세탁기, 건조기, 사람 손)가 있는데, 순차적으로 돌리는 것은 효율적이지 않다.

- fetch: 명령어를 가져온다.
- decode: 명령어를 해석 및 레지스터 파일을 찾는다.
- excute: 실행 또는 주소를 계산한다.
- write back: 연산을 타겟 레지스터에 저장한다.
// 현재 a = 0, b = 0; a = 1; // 캐시에 없음 b = 1; // 캐시에 있음
a
가 캐시에 없으므로 Ram에서 내용을 가져오기에 시간이 오래 걸리므로 b = 1을 먼저 수행할 수 있다.<aside>
💡 a가 캐시에 없으므로 a를 메모리에서 가져오는 동안 b =1을 수행한다.
따라서 다른 스레드에서는 a가 0인데, b가 1인 순간을 관찰이 가능하다.
</aside>
원자성
변수 또는 객체 하나가 실시간으로 변화하는 순서를 기록한 것을 수정 순서라한다.

어떤 스레드가
a
를 읽었다면 다음 스레드는 a
를 8, 6, 3 중 하나의 상태로 볼 수 있다. 5로는 못본다는 것이다.모든 스레드들이 이러한 순서에 동의를 하는 경우 원자적이라고 한다.
원자성
즉, 원자적 연산이란 CPU가 명령어 1개로 처리하는 명령으로, 다른 쓰레드가 끼어들 여지가 없는 상태이다. → 동기화 영역이 필요하지 않게 되고 속도가 빨라지게 된다.
댓글