서로 다른 언어, 서로 다른 스레드 모델

오픈소스·2022년 11월 5일
0
post-custom-banner

https://product.kyobobook.co.kr/detail/S000001952246

쏙쏙 들어오는 함수형 코딩, P403

단일 스레드, 동기

기본적으로 멀티스레드를 지원하지 않는 언어도 있습니다. 예를 들어 PHP는 기본적으로 멀티스레드를 사용할 수 없습니다. 모든 것이 순서대로 실행되고 입출력을 사용하면 끝날 때까지 기다려야 합니다. 하지만 이런 제약은 시스템이 단순하다는 장점이기도 합니다. 스레드가 하나면 타임라인도 하나이지만, 네트워크를 통한 API 호출 같은 것도 다른 타임라인이 필요합니다. 하지만 메모리를 공유하지 않기 때문에 공유 자원을 많이 없앨 수 있습니다.

단일 스레드, 비동기

자바스크립트는 스레드가 하나입니다. 입출력 작업을 하려면 비동기 모델을 사용해야 합니다. 입출력의 결과는 콜백으로 받을 수 있지만, 언제 끝날지 알 수 없기 때문에 다른 타임라인에 표현해야 합니다.

멀티스레드

자바나 파이썬, 루비, C, C#과 같은 많은 언어가 멀티스레드를 지원합니다. 멀티스레드는 실행 순서를 보장하지 않기 때문에 프로그래밍하기 매우 어렵습니다. 새로운 스레드가 생기면 새로운 타임라인을 그려야 합니다.

메시지 패싱(message-passing) 프로세스

엘렉서나 얼랭 같은 언어는 서로 다른 프로세스를 동시에 실행할 수 있는 스레드 모델을 지원합니다. 프로세스는 서로 메모리를 공유하지 않고 메시지로 통신합니다. 서로 다른 타임라인에 있는 액션은 순서가 섞이지만, 메모리를 공유하지 않기 때문에 가능한 실행 순서가 많아도 문제가 되지 않습니다.

post-custom-banner

0개의 댓글