|
동시성(concurrency)을 처리하는 기법 중 한 가지는 "액터(actor)"라고하는 기본 단위를 두고 그 액터들 간에 메시지를 주고받는 방법으로 연산을 처리하는 것이다. 예를 들어 A와 B, C 라고하는 세 개의 액터가 있다면 이들은 각자 독립적인 활동을 하면서 서로 간에 소통할 일이 있으면 메시지를 주고 받는다. 액터들 간에는 메시지를 주고받는 것 외에는 어떤 다른 것도 서로 공유하지 않는다. 따라서 흔히 스레드기반으로 동시성을 처리할 때 접하게 되는 경쟁조건(race condition)이나 데드락(deadlock) 같은 문제가 발생할 여지가 없어진다. 서로 "공유하는 상태"라는 것 자체가 없기 때문이다. 그리고 이런 방식의 동시성 처리 모델을 일컬어 '액터 모델(Actor model)'이라 부른다.
예를 들어, 얼랭에서는 다음과 같은 방식으로 메시지를 처리한다.(즉, 동시성을 다룬다). 간단한 echo 서버인데, spawn 명령으로 프로세스를 하나 띄우면, 그 프로세스는 계속해서 루프를 돌면서 들어오는 메시지를 받아 입맛에 맞는 메시지만 선별적으로 처리하는 구조인 것이다. 이런 프로세스가 한 개, 두 개 뿐이라면 사실 별 의미가 없겠지만, 수천~수십만 개의 프로세스가 동시에 돌아간다면 상황이 조금 달라질 것이다. 그것도 서버가 감내할 수 있는 부하의 범위에서 말이다. -module(echo).이게 왜 중요한지는 두말할 여지가 없다. 멀티코어 CPU들의 세상이 되고, 갈수록 네트워크와 클러스터링을 감당할 기회가 많아지고 있기 때문에 그런 복잡한 환경 속에서 제대로 모든 자원을 활용하면서 병행 처리를 해 나갈 수 있는 프로그래밍 기법들이 필요해 지는 것은 당연하기 때문이다. 프로그래밍 아이디어가 광우병이나 AI 같은 병원성 전염성을 가지지는 않지만, 그래도 좋은 생각들은 물흐르듯 흐른다. 이제 루비에서도 이와 같은 액터 모델을 구현하는 라이브러러가 등장했으니 바로 Revactor라고 하는 라이브러리다. 루비 1.9 기반에서 돌아가며, 아직은 초기버전 상태이지만 주목할만한 프로젝트라고 생각한다. 예를 들어, 위의 얼랭 코드를 Revactor를 사용하여 다시 루비로 작성해 보면 다음과 같은 형태가 될 것이다.(echo를 돌려 보내는 방법은 아직 찾지 못했다) require 'revactor' # by thinkr | 2008/05/07 12:43 | 트랙백(1)
|
카테고리
최근 등록된 덧글
저도 장바구니에 넣었습..
by greatdg at 11/30 '호감의 법칙'과 '미러링.. by lesperan at 11/30 요런 http://choboweb.. by 몰아저씨 at 11/13 음 제 경우 지금 메모리.. by 서울비 at 10/25 새 버전이신가 보네요,.. by 연안부두 at 10/22 CPU 사용량이 엄청나군.. by 오스카 at 10/22 드롭박스 깔고 팬이 자주.. by 백일몽 at 10/22 다른 개발자분이 작업하.. by GreatDG at 10/22 최소 3대는 해봐야겠더.. by 펭도 at 10/21 browsershots 같은 .. by thinkr at 10/21 최근 등록된 트랙백
라지엘의 느낌
by laziel's me2DAY 우리는 언제나 창작과 .. by 시답잖은 지식과 개똥철학 월아, 알고리즘 by Read & Lead 우엉의 생각 by oldtype's me2DAY 졸음을 깨우기 위해 재미.. by jack in the box 이젠 업그레이드인가.. ra.. by Always Renewal 제로안의 생각 by zeroan's me2DAY 아샬의 생각 by ahastudio's me2DAY 구글사이트 접속차단 by P-camp & 대안언어축제.. 펭도의 생각 by pengdo's me2DAY 라이프로그
태그
| |||