메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

스택리스 파이썬 개론(2)

한빛미디어

|

2001-04-04

|

by HANBIT

7,227

by 카메론 레이어드 마이크로스레드 윌 웨어의 마이크로스레드는 "상아탑"으로부터의 긴 여행이다. 스크립팅 언어는 게임을 만들 때에 사용되는 인기 있는 구현이 되고 있다. 일반적으로 스크립팅 언어는 높은 수준의 구조 때문에 고객화하기 쉽고 확장성이 있다. 게임은 그 특성상 시장에 나오는 타이밍이 중요하기 때문에, 이러한 점들은 게임을 만드는 데에 반드시 필요한 요소이다. 하지만 수행은 역시 필수적이며, 종래의 스레딩은 게임 프로그래밍에서 중요한 사항들을 충족시키기에는 너무 빈약했다. 마이크로스레드는 완벽한 해답이다. 웨어가 공동으로 쓴 설명에서는 다음과 같이 나와있다: 마이크로스레드는 동시에 일어나는 여러 반응을 프로그램하기를 원할 때 유용하다. 시뮬레이션과 게임에는 종종 많은 사람들이나, 많은 회사들, 많은 괴물들이 동시에 독립적으로 행동하도록 만들 수 있는 모델이 필요하다… 마이크로스레드를 사용하면, 이러한 행위들을 파이썬 함수처럼 코딩할 수 있다… 마이크로스레드는 OS 스레드보다 빨리 전환할 수 있고 메모리를 훨씬 적게 사용한다. 그래서 마이크로스레드는 동시에 수 천 개를 사용할 수도 있다. 이러한 이점들과 스택리스의 구현 세부사항은 어떤 관계가 있을까? 대략적으로 설명하자면 다음과 같다: 컨티뉴에이션은 일반 목적의 병행(concurrency) 구성이다. 컨티뉴에이션은 특정 프로그램의 모든 미래의 컴퓨터 사용을 대표한다. 이러한 통제의 흐름을 하나의 개념적인 객체에 담으면, 프로그램하기가 쉬워 진다. 즉, 통제의 흐름을 계산하거나 추론할 수 있게 된다는 것이다. 특히, 여러 가지 연산을 다른 프로세스나 스레드, 혹은 호스트에 할당할 때, 최적화 할 수 있는 범위가 크다.
역주 - 컨티뉴에이션(continuation) : 간단히 예를 들면, 사용자가 게임을 진행하던 상태를 그대로 다른 곳으로 전송하여 다른 곳에서 그 시점에서 이어할 수 있는 것을 말한다. 중간 정도까지 실행된 프로그램의 상태를 전송할 수 있는 방법은 없다. 그러나 컨티뉴에이션을 이용하면 중간까지 실행된 시점을 다른 곳에 전송하여 중단된 시점부터 이어서 작업할 수 있도록 할 수 있다.
단순한 프로그램을 예로 들어 보겠다. x = 2 y = x + 1 z = x * 2 이 예를 통해서, x = 2의 continuation은 y = x + 1; z = x * 2. ... 이다. 코드의 모든 라인에는 앞으로 집행될 프로그램 전체를 나타내는 컨티뉴에이션이 들어가 있다. 컨티뉴에이션은 일반적이기 때문에, 스레드를 효율적으로 모델링할 수 있다. 이 때, OS 스레드는 여러 해 동안 많은 것들을 담아 왔다. 예를 들어서 리전드는 스레드를 가볍다(light-weight)고 광고한다. 사람들은 스레드가 프로세스보다 더 민첩하다고 생각해 왔다. 하지만 이것은 더 이상 사실이 아니다. 산업 관행 때문에 스레드와 프로세스는 리소스 요구에 집중하게 되었다. 스레드는 특별히 가벼운 것은 아니다. 주도적인 하나의 OS에서 공급하는 것이 아니라, 커뮤니케이션과 동조가 가능한 한 최소화된 수행의 흐름으로부터 공급받는 이상적인 스레드를 생각해 보라. 그것이 마이크로스레드이고, 컨티뉴에이션은 모델 마이크로스레드가 될 수 있을 뿐만 아니라, 그것들은 다른 병행(concurrency) 구조를 모두 형성할 수 있다. 이 점은 매우 중요하다. 전문가들 사이에서, 일반적인 멀티스레드 웹 서버는 적절한 숫자 이상의 스레드를 도출할 때 잘 작동하지 않는다는 것이 잘 알려져 있다. 스택리스 마이크로스레드는 파이썬이 가지고 있는 프로그래밍하기 쉬운 요소들을 모두 가지고 있을 뿐 아니라, 간단한 장비에서도 수백만 개의 마이크로스레드를 다룰 수 있다. 스택리스가 마이크로스레드에 주는 점은 신뢰성과 수행만이 아니다. 스택리스로 인해 마이크로스레드나, 그와 관련된 통제 구조가 영속성 있게 된다. 스택리스는 저장되고 복구되는 상태를 허락할 재현을 가질 것이다. 게임을 실행하는 수준에서는, 시뮬레이션 객체를 일시 정지 시키고 저장하거나, 그것을 다른 프로세스나 호스트에서 재배치하는 것 까지도 할 수 있는 자연스럽고 완벽한 방법이 있을 것이라는 것을 의미한다. 게임 플레이어는 그의 아이디를 만들고, 몇 달 후에 게임을 끝마쳤던 위치에서 다시 이어서 게임을 시작할 수 있다. 시리얼라이제이션을 끝마친 형태에서는 가능하지 않지만, 그것은 이미 티즈머의 계획에 들어가 있다. 티즈머가 상황을 설명한 대로, "마이크로스레드는 일반적인 컨티뉴에이션보다 시리얼라이제이션(serialization)이 더 쉽다… 마이크로스레드는 우리가 시리얼라이즈할 수 있는 첫 번째 것이 될 것 같다." 처음에 우리가 경험한 것들로부터 알 수 있는 것은, API가 더 한정되기만 하면 더 잘 작동할 것이라는 것이다.
역주 - 시리얼라이제이션(serialization) : 여러 컴퓨터 사용자가 동시에 한 데이터에 액세스할 때 마치 혼자 그 데이터에 액세스 하는 것처럼 동일한 결과를 얻는 효과.마이크로스레드 : OS 스레드와 달리 경량화된 스레드. 스택리스 파이썬에서는 컨티뉴에이션을 이용해서 구현되었다.
재미있는 세계에 함께 참가하라 나는 현실 감각을 잃지 않은 채로 스택리스의 앞으로의 전망에 대해 설명하기 위해 이 글을 썼다. 여기서는 내용을 간략하게 설명하였으며, 스택리스 프로그래밍에 대해 다음 글에서 더 자세히 설명하겠다. 그 글을 읽으면, 스택리스 파이썬으로 자기만의 작업을 하는 것이 얼마나 쉬운지 알게 될 것이다. 관련기사: 스택리스 파이썬 개론(1)
TAG :
댓글 입력
자료실