3P by neo 2023-08-26 | favorite | 댓글과 토론
  • 글에서는 저자의 Elixir 프로그래밍 언어 경험에 대해 논의하며, 그 중점은 동시성과 병렬성 기능에 있다.
  • 저자는 지난 5-6년 동안 Elixir를 기본 프로그래밍 언어로 사용하며 그 성능과 최소한의 단점을 인정했다.
  • 저자는 Elixir의 동시성 모델을 PHP와 Python과 비교하며, PHP의 동시성 모델은 웹 서버에 의존하고, Python은 Global Interpreter Lock (GIL) 때문에 동시성에 어려움을 겪는다고 주장한다.
  • Elixir는 Erlang과 Erlang 가상 머신 (BEAM) 위에 구축되어 있으며, 이는 많은 수의 경량 프로세스를 실행하도록 설계되어 동시성과 병렬성의 기초를 제공한다.
  • BEAM은 시작할 때 스케줄러에 대한 스레드를 생성하며, 기본적으로 사용 가능한 CPU 코어 당 하나씩 프로세스 스케줄링을 처리한다.
  • 저자는 Elixir와 Erlang의 불변성 함수형 프로그래밍 특성이 고도의 동시성과 병렬성을 달성하기 위해 실용적으로 선택된 것이라고 설명한다.
  • Elixir에서의 프로세스는 상태를 공유하지 않으며, 메시지 전달을 통해 비동기적으로만 통신할 수 있어 안전한 동시 및 병렬 실행을 보장한다.
  • 저자는 Elixir로 코드를 작성할 때, 대부분의 웹 요청이 단일 프로세스 내에서 이루어지므로 이러한 기본 원칙에 대해 크게 걱정할 필요가 없다고 지적한다.
  • Elixir는 동시 작업을 위한 async/await 메커니즘을 제공하며, 이는 Task 모듈에서 구현되고, 열거 가능한 각 항목에 대해 Task를 실행하는 Task.async_stream 함수가 있다.
  • 저자는 Elixir와 Erlang의 동시성과 병렬성에 대한 훌륭한 옵션이 뒤늦게 생각해낸 것이 아니라 런타임의 기초에 빌드되어 있어, BEAM에서의 동시성은 위험하거나 어렵지 않다고 결론짓는다.