2010-12-27 6 views
7

필자는 erlang에 익숙하지 않으며 erlang은 동시성 지향 프로그래밍이며 변경 가능한 데이터 구조가 없으므로 병렬 처리가 쉽습니다.어떻게 erlang이 공유 리소스에 액세스합니까?

하지만 어쨌든 공유 리소스는 여전히 존재합니다 (예 : 동일한 파일에 쓰기). 이 경우, erlang은 두 프로세스간에 공유 리소스 액세스를 어떻게 동기화합니까?

답변

11

일반적으로 수행 할 작업은 프로세스가 공유 리소스에 대한 액세스를 담당하는 것입니다. 다른 프로세스는 공유 자원에 정보를 읽거나 쓰는 요청에 대해 단일 관리자 프로세스에 메시지를 보냅니다.

일부 공유 리소스 (예 : 일부 유형의 ETS 테이블)는 여러 프로세스에서 읽을 수 있지만 하나의 프로세스 만 을 쓸 수 있습니다. 그래서 당신은 하나의 프로세스를 설정하여 테이블에 대한 직렬 쓰기를 수행 할 수 있습니다.

+0

또한 내 경험에 비추어 볼 때, 요청을 직렬화하는 책임이있는 프로세스는 종종 일반 서버 (gen_server)로 구현됩니다. http://www.erlang.org/doc/man/gen_server.html. –

+1

ETS 테이블에 여러 작성자를 지정할 수 있습니다. 버킷 잠금 방식 인 IIRC를 사용하므로 다른 프로세스에서 쓰기 작업이 충돌하지 않는 한 상당히 빠릅니다. Tuple 공간은 ETS에 대한 좋은 비유입니다. –

관련 문제