Elixir의 프로세스 모델은 어떻게 작동하나요?
_____A1: Elixir의 프로세스는 가벼운 실행 단위로, 운영체제의 프로세스나 스레드와는 다릅니다. Erlang VM(Beam) 위에서 동작하며, 수천에서 수십만 개까지도 효율적으로 생성 및 관리할 수 있습니다.
Q2: Elixir 프로세스는 어떻게 생성하나요?
A2: `spawn/1`, `spawn/3`, `Task.start/1`, `GenServer.start_link/3` 등 다양한 함수로 프로세스를 생성할 수 있습니다. 생성된 프로세스는 독립적으로 실행되며 메시지를 주고받을 수 있습니다.
Q3: Elixir 프로세스 간 통신은 어떻게 이루어지나요?
A3: 메시지 큐(Message Queue)를 통해 비동기 메시지를 주고받습니다. 프로세스는 `send/2` 함수로 메시지를 보내고, `receive` 블록으로 메시지를 처리합니다.
Q4: 각각의 프로세스가 독립적이라고 했는데, 상태 공유는 가능한가요?
A4: 직접적인 상태 공유는 불가능합니다. 각 프로세스는 독립적인 메모리 공간을 가지므로, 상태를 변경하려면 메시지 전달로 상태를 변경하는 방식을 사용해야 합니다.
Q5: 프로세스는 어떻게 오류에 강한가요?
A5: Elixir 프로세스는 격리되어 있어 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않습니다. 또한 감독자(Supervisor)가 프로세스를 감시하고 오류 발생 시 재시작하는 구조로 내결함성을 높입니다.
Q6: 프로세스 ID는 무엇이고 어떻게 활용하나요?
A6: 각 프로세스는 PID(Process Identifier)를 가지며, 메시지를 보낼 때 대상 프로세스를 식별하는 데 사용됩니다. PID는 프로세스가 존재하는 동안 유일합니다.
Q7: 프로세스 스케줄링은 어떻게 이루어지나요?
A7: Erlang VM은 내부 작업 스케줄러를 통해 프로세스들에게 실행 시간을 분배합니다. 프로세스는 선점형(not strictly 선점)에 가까운 협력적인 멀티태스킹으로 동작합니다.
Q8: 프로세스의 수명 주기는 어떻게 관리되나요?
A8: 프로세스는 자신이 작업이 끝나면 자연스럽게 종료하거나, 에러발생 시 종료됩니다. 부모 프로세스 또는 감독자가 이를 감지하여 적절히 대응할 수 있습니다.
Q9: 프로세스 간 동기 통신도 가능한가요?
A9: 기본 메시지 전달은 비동기이지만 `GenServer.call/3` 같은 동기 호출을 통해 동기 통신도 구현할 수 있습니다.
Q10: Elixir 프로세스와 OS 프로세스의 차이점은 무엇인가요?
A10: Elixir 프로세스는 VM 내부의 경량 프로세스로, 수십만 개의 프로세스를 효율적으로 다룰 수 있으나, OS 프로세스는 무겁고 한정적입니다. Elixir 프로세스는 서로 독립적이며 상태 공유가 없고, 메시지 기반 통신을 통해 협력합니다.
작성자:
김하윤 [비회원]
| 작성일자: 1년 전
2025-01-02 06:21:24
조회수: 130 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 130 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.