동시성과 병렬성
동시성과 병렬성
동시성(concurrency)은 하나의 프로그램 안에서 여러 실행 흐름(스레드)을 다루는 능력이에요. Racket은 프로그램 내부의 여러 스레드, 스레드 지역 저장소, 몇 가지 기본적인 동기화 메커니즘, 그리고 동기화 추상화를 조합하기 위한 프레임워크를 지원해요.
여기에 더해 racket/future와 racket/place 라이브러리는 성능 향상을 위한 병렬성(parallelism)을 지원해요.
출처: Racket Reference
본문
Racket은 프로그램 내에서 여러 실행 제어 스레드를 지원하며, 스레드 지역 저장소, 몇 가지 기본 동기화 메커니즘, 그리고 동기화 추상화를 조합하기 위한 프레임워크를 제공해요. 추가로 racket/future와 racket/place 라이브러리는 성능 향상을 위한 병렬성을 지원해요.
아래는 동시성과 병렬성의 하위 주제 목록이에요.
11.1 스레드 (Threads)
11.1.1 스레드 만들기 (Creating Threads)
11.1.2 스레드 일시중지·재개·종료 (Suspending, Resuming, and Killing Threads)
11.1.3 스레드 상태 동기화 (Synchronizing Thread State)
11.1.4 스레드 사서함 (Thread Mailboxes)
11.1.5 병렬 스레드 풀 (Parallel Thread Pools)
11.2 동기화 (Synchronization)
11.2.1 이벤트 (Events)
11.2.2 채널 (Channels)
11.2.3 세마포어 (Semaphores)
11.2.4 버퍼링된 비동기 채널 (Buffered Asynchronous Channels)
11.2.4.1 비동기 채널 만들고 사용하기 (Creating and Using Asynchronous Channels)
11.2.4.2 비동기 채널의 계약과 인페르소네이터 (Contracts and Impersonators on Asynchronous Channels)
11.3 스레드 지역 저장소 (Thread-Local Storage)
11.3.1 스레드 셀 (Thread Cells)
11.3.2 파라미터 (Parameters)
11.4 퓨처 (Futures)
11.4.1 퓨처 만들고 터치하기 (Creating and Touching Futures)
11.4.2 퓨처 세마포어 (Future Semaphores)
11.4.3 퓨처 성능 로깅 (Future Performance Logging)
11.5 플레이스 (Places)
11.5.1 플레이스 사용하기 (Using Places)
11.5.2 플레이스 사용을 위한 문법 지원 (Syntactic Support for Using Places)
11.5.3 플레이스 로깅 (Places Logging)
11.6 엔진 (Engines)
11.7 머신 메모리 순서 (Machine Memory Order)
스레드는 프로그램 내부의 병행 실행을, 퓨처와 플레이스는 실제 병렬 실행을 담당한다는 점이 핵심 차이예요. 스레드로는 하나의 CPU 코어에서 시간을 나눠 쓰고, 퓨처와 플레이스는 여러 코어를 활용해 계산을 동시에 진행해요.