스레드 안전 [Thread - Safety]

Vert.x에서 채택한 이벤트 루프[Event Loop, ELP] 모델은 기본적으로 싱글 스레드에서 작동하는 것이 원칙이다. 그러나 Vert.x는 신기하게도 스레드 풀을 만들어, 같은 인스턴스 내 ELP 여러 개를 생성하여 작업을 수행시킬 수 있다. 즉, Vert.x의 인스턴스는 상황에 따라 멀티스레드로 작동한다는 점이 장점이라고 할 수 있다.이론상으로는, 시스템 리소스가 허용하는 한 스레드의 갯수가 많을 수록 작업처리량 또한 그에 비례한다.

그러나 스레드 여러 개가 동시에 같은 하드웨어 리소스에 접근하려 할 때, 혹은 같은 변수의 데이터에 대한 읽기와 쓰기 작업을 동시에 진행하려 드는 경우 등 여러가지 문제가 발생하며, 컴퓨터과학에서는 이것을 동시성1 문제라고 부른다. 실제로 돌아가는 대부분의 프로그램은, 동시성 문제를 해결하는 과정을 거치느라 이론상 예측 가능한 최대 속도에는 미치지 못하는 경우가 많다.

Vert.x는 멀티스레드 작동상황에서 발생할 수 있는 동시성 문제를 해결하기 위해, 인스턴스 내 모든 ELP들은 동시에 같은 리소스에 접근하지 않도록 철저하게 차단하였다. 심지어 같은 소스코드 기반의 작업이 다른 ELP에서 동시에 작동하게 되더라도, 그 작업들 사이에는 그 어떤 동시성 문제도 발생시키지 않도록 완전히 분리된 상태로 작동하게 된다.

Vert.x 는 이 방법을 통해 완전한 스레드 안전 [Thread - Safety]2 환경을 구축하는데 성공하였고, 이에 따라 동시성 문제가 근본적으로 해결되어 있는 상태로 작업 처리성능을 극대화할 수 있게 되었다. 그러나, 이 조치 떄문에 타 인스턴스는 물론, 같은 인스턴스 내 스레드간에는 그 어떤 데이터 공유도 직접적으로 하진 못하게 되었다. 아주 방법이 없는 것은 아니지만, 3 프로그램 내에서 공유하는 것 보단 불편하므로, 코딩시 유의해야 한다.

1. 위키백과 영문판, "Concurrency (computer science)"
2. 위키백과 한글판, "스레드 안전"
3. 같은 인스턴스 내의 경우 이벤트 버스를 이용하여 간접적 공유가 가능하다. 타 인스턴스간 데이터 공유는 외부 데이터베이스를 이용하는 방법밖엔 존재하지 않는다.

results matching ""

    No results matching ""