본문 바로가기

atomics3

Atomics? 1. Atomics란 무엇인가?Atomics는 ECMA2017(ES2017 이상)에서 제공되는 정적(Static) 객체로, 다중 스레드 환경에서 고유 메모리에 대해 원자적(atomic)인 연산을 수행할 수 있도록 도와주는 API이다. 1.1 왜 필요한가?1. 멀티스레드 동기화자바스크립트는 원칙적으로 싱글 스레드(Event Loop) 기반 언어이지만, Web Worker나 Node.js Worker Threads 등을 사용하면 스레드 유사 환경에서 병렬 처리를 할 수 있다.이때 여러 스레드(Worker)가 공유 메모리(SharedArrayBuffer)에 접근, 수정할 수 있는데, 스레드 간 동기화(레이스 컨디션 방지)가 필요하다.C/C++ 등 전통적인 언어에서 제공되는 원자적 연산(atomic operat.. 2025. 3. 11.
Spinlock - 스핀락 스핀락(Spinlock)이란?스핀락은 락(잠금) 대상이 해제될 때까지 스레드가 계속해서(바쁘게) 확인하는(스핀 도는)' 방식으로 동작하는 락 구현이다.보통 멀티스레드 환경에서 하나의 스레드가 잠금을 획득하려고 할 때, 잠금을 사용 중인 다른 스레드가 잠금을 해제할 때까지 짧은 반복문으로 대기(바쁜 대기, busy-wait)하는 구조다.일반적인 뮤텍스(mutex)는 OS 커널이 스레를 '수면(sleep)' 상태로 만들어 CPU를 양보하지만, 스핀락은 스레드를 그대로 계속 돌면서 잠금 여부를 확인한다. 스핀락의 장단점장점락을 기다리는 시간이 매우 짧다면(ns ~ μs), 스레드를 커널에 의뢰해 '수면/깨우기(sleep/wakeup)' 과정을 거치는 것보다 빠를 수 있다.커널에 의존하기보다 사용자 레벨에서 락.. 2025. 2. 28.
SharedArrayBuffer SharedArrayBuffer는 자바스크립에서 메모리를 여러 스레드(Worker) 간에 공유할 수 있도록 고안된 객체로, 기존의 ArrayBuffer는 단일 스레드에서만 접근 가능한 반면, SharedArrayBuffer는 복수의 워커(또는 메인 스레드)가 동일한 물리 메모리를 직접 접근할 수 있게 해준다. 이로써 고성능 병렬처리를 위한 "공유 메모리" 방식의 프로그래밍이 가능해졌다.다만, 여러 스레드가 동시에 같은 메모리 영역을 읽고 쓰는 구조가 되므로, 올바르게 사용하기 위해서는 동시성 제어(Atomics API)와 보안(COOP/COEP 설정) 등을 고려해야 한다. 1. SharedArrayBuffer의 기본 개념1.1. 공유 가능한 메모리 버퍼ArrayBuffer와 유사하게, 이진 데이터를 담을.. 2025. 2. 28.