Elixir에서의 동시성 모델은 어떻게 되나요?
_____A1: Elixir는 액터 모델(actor model)을 기반으로 하는 경량 프로세스(lightweight processes)와 메시지 패싱(message passing)을 사용한 동시성(concurrency) 모델을 채택하고 있습니다. 각 프로세스는 독립적으로 실행되며, 서로 메시지를 비동기적으로 주고받아 협력합니다.
Q2: Elixir 프로세스란 무엇인가요? OS 프로세스와 다른 점은?
A2: Elixir 프로세스는 가상 머신인 BEAM 위에서 실행되는 경량 스레드로, 수십만 개도 동시에 생성할 수 있을 만큼 매우 경량화되어 있습니다. 반면 OS 프로세스나 스레드는 무겁고 수가 제한적입니다. Elixir 프로세스는 메모리와 스케줄링이 VM에 의해 관리됩니다.
Q3: Elixir에서 메시지 패싱이란 무엇인가요?
A3: 프로세스는 서로 직접 메모리를 공유하지 않고, 비동기적으로 메시지를 주고받습니다. 한 프로세스가 다른 프로세스의 메일박스(mailbox)로 메시지를 보내면, 받는 프로세스가 이를 처리합니다. 이는 상태 공유 없이 안전한 동시성을 가능하게 합니다.
Q4: Elixir는 어떻게 프로세스 간 동기화를 하나요?
A4: 직접적인 락(lock)이나 뮤텍스(mutex) 대신, 메시지 패싱과 프로세스 간 통신을 통해 필요한 동기화를 구현합니다. 예를 들어, 특정 프로세스가 작업을 처리하고 결과를 메시지로 반환하는 방식으로 동기화할 수 있습니다.
Q5: Elixir의 동시성 모델의 장점은 무엇인가요?
A5:
- 고도로 확장 가능하며 수십만 동시 프로세스를 효과적으로 처리 가능
- 프로세스 간 독립성이 보장되어 오류 전파를 제한하며 견고함
- 비동기 메시징으로 인해 병목현상이 줄어듦
- 프로세스 단위로 실패 복구 전략을 세울 수 있어서 내결함성 탁월
Q6: Elixir에서 동시성을 지원하는 주요 도구는 무엇인가요?
A6:
- `send/2` 와 `receive` 키워드로 메시지 전송과 수신
- `Task` 모듈: 동시성 작업을 쉽게 처리하기 위한 추상화
- `GenServer` 추상화: 상태를 갖는 서버 프로세스를 쉽게 구현
- `Agent` 모듈: 상태 관리용 경량 프로세스
Q7: Elixir의 동시성 모델은 병렬성(parallelism)과 같은 의미인가요?
A7: 동시성(concurrency)은 여러 작업을 동시에 처리할 수 있는 능력을 의미하고, 병렬성(parallelism)은 실제로 여러 연산이 물리적으로 동시에 수행되는 상태를 말합니다. Elixir 프로세스는 BEAM 스케줄러가 여러 CPU 코어에서 동시 실행하도록 하여 병렬성도 자연스레 지원합니다.
Q8: 동시성 모델이 내결함성에 어떻게 기여하나요?
A8: 프로세스가 독립적으로 실행되고, 실패 시 다른 프로세스에 영향이 적어 에러 복구가 쉽습니다. `Supervisor` 트리를 사용하여 프로세스가 실패했을 때 자동으로 재시작할 수 있어서 시스템 안정성을 높입니다.
Q9: Elixir 동시성 모델을 배우는데 추천 자료가 있나요?
A9:
- 공식 문서: [elixir-lang.org](https://elixir-lang.org/getting-started/processes.html)
- 책: "Programming Elixir", "Elixir in Action"
- Erlang/OTP 자료도 참고 시 유용 (BEAM 기반)
---
요약하면, Elixir의 동시성 모델은 BEAM 가상 머신 위에서 동작하는 경량 프로세스와 메시지 패싱을 활용해 안전하고 효율적인 동시성 환경을 제공하며, 내결함성 및 확장성에서 뛰어난 장점을 갖고 있습니다.
작성자:
박주희 [비회원]
| 작성일자: 1년 전
2025-01-02 06:21:47
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.