|
동시성(concurrency)을 처리하는 기법 중 한 가지는 "액터(actor)"라고하는 기본 단위를 두고 그 액터들 간에 메시지를 주고받는 방법으로 연산을 처리하는 것이다. 예를 들어 A와 B, C 라고하는 세 개의 액터가 있다면 이들은 각자 독립적인 활동을 하면서 서로 간에 소통할 일이 있으면 메시지를 주고 받는다. 액터들 간에는 메시지를 주고받는 것 외에는 어떤 다른 것도 서로 공유하지 않는다. 따라서 흔히 스레드기반으로 동시성을 처리할 때 접하게 되는 경쟁조건(race condition)이나 데드락(deadlock) 같은 문제가 발생할 여지가 없어진다. 서로 "공유하는 상태"라는 것 자체가 없기 때문이다. 그리고 이런 방식의 동시성 처리 모델을 일컬어 '액터 모델(Actor model)'이라 부른다.
예를 들어, 얼랭에서는 다음과 같은 방식으로 메시지를 처리한다.(즉, 동시성을 다룬다). 간단한 echo 서버인데, spawn 명령으로 프로세스를 하나 띄우면, 그 프로세스는 계속해서 루프를 돌면서 들어오는 메시지를 받아 입맛에 맞는 메시지만 선별적으로 처리하는 구조인 것이다. 이런 프로세스가 한 개, 두 개 뿐이라면 사실 별 의미가 없겠지만, 수천~수십만 개의 프로세스가 동시에 돌아간다면 상황이 조금 달라질 것이다. 그것도 서버가 감내할 수 있는 부하의 범위에서 말이다. -module(echo).이게 왜 중요한지는 두말할 여지가 없다. 멀티코어 CPU들의 세상이 되고, 갈수록 네트워크와 클러스터링을 감당할 기회가 많아지고 있기 때문에 그런 복잡한 환경 속에서 제대로 모든 자원을 활용하면서 병행 처리를 해 나갈 수 있는 프로그래밍 기법들이 필요해 지는 것은 당연하기 때문이다. 프로그래밍 아이디어가 광우병이나 AI 같은 병원성 전염성을 가지지는 않지만, 그래도 좋은 생각들은 물흐르듯 흐른다. 이제 루비에서도 이와 같은 액터 모델을 구현하는 라이브러러가 등장했으니 바로 Revactor라고 하는 라이브러리다. 루비 1.9 기반에서 돌아가며, 아직은 초기버전 상태이지만 주목할만한 프로젝트라고 생각한다. 예를 들어, 위의 얼랭 코드를 Revactor를 사용하여 다시 루비로 작성해 보면 다음과 같은 형태가 될 것이다.(echo를 돌려 보내는 방법은 아직 찾지 못했다) require 'revactor'
|
카테고리
최근 등록된 덧글
잘 봤습니다 ^^
by xeraph at 07/16 100% 동감합니다. 앞으.. by ikspres at 07/05 책 잘 읽고 있습니다. .. by 인간흉기 at 06/28 본문 가장 아래 문단에 오.. by Tirin at 06/17 책 배달되어서 잘 받았.. by 짱가 at 06/16 Partial Update 기능은 .. by kkoon at 06/13 책이 배달되어서 잘 받아.. by 낭만고양이 at 06/13 석준님, 안녕하세요? 글.. by ssun at 06/12 게다가 미인이시라는거 .. by 김성안 at 06/12 좋은 정보 저도 감사드려요. by 레인블루 at 06/12 최근 등록된 트랙백
Unobtrusive는 뭐라 ..
by 인사이트 테라의 느낌 by terra's me2DAY 열정 충전소 - 6회 루비.. by 오 픈 마 루 스 튜 디 오 [Rails] 레일스 2.1 .. by 쎄미 테라의 생각 by terra's me2DAY 멀티랭귀지 프로그래밍 by Minthe Blog 화니의 느낌 by lethee's me2DAY 꽃띠앙의 생각 by codian's me2DAY 종텐++의 느낌 by jong11's me2DAY "애자일(Agile.. by 나루 공식 블로그 이글루 링크
이전 블로그
| |||