ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • The Deadlock Empire 소개 & 후기
    개발, 코딩/개인 탐구 2020. 3. 29. 00:13

    The Deadlock Empire 링크: https://deadlockempire.github.io/

    해당 사이트를 만든 저자들의 소개 링크: https://devpost.com/software/the-deadlock-empire

     

    The Deadlock Empire

    Slay dragons, learn concurrency! Play the cunning Scheduler, exploit flawed programs and defeat the armies of the Parallel Wizard.

    deadlockempire.github.io

    <The Deadlock Empire>는 멀티스레드 프로그래밍이 어려운 사람들을 위해서 만들어진 게임 사이트입니다.

    구체적으로는 멀티스레드 프로그래밍을 하면서 제대로 동기화(Synchronization) 처리가 되지 않았을 때 어떠한 문제가 발생할 수 있는지, 내부적으로 어떻게 동작하는지 이해를 도와주는 유익한 사이트입니다. 일종의 wargame 사이트랑 비슷한 느낌이에요.

    게임 방식은 아래와 같습니다.

    "The Deadlock Empire" 사이트의 Tutorial 사진

    나 자신이 스케쥴러(scheduler)가 되어서 각 스레드의 코드를 한 줄씩 순차적으로 실행(step)하는 방식인데요, 이 과정에서 여러 스레드가 동시에 critical section에 접근하거나 deadlock이 걸리거나.. 어쨌든 프로그램이 비정상적으로 작동하게 되면 게임에 승리하게 됩니다.

    이 과정에서 자연스럽게, 아.. 이런 식으로 멀티스레드 코드를 짜면 안 되는구나! 하고 직관적으로 이해를 할 수 있습니다.

     

    저의 경우 현재 High-Level Synchronization Primitives까지 문제를 풀었는데요.

     

    이 문제들을 이해하기 위해서 필요해 보이는 핵심 개념을 딱 2가지 정도만 작성해보고자 합니다. 프로세스와 멀티스레딩이 대충은 뭔지 알고 있는 상황을 가정하고 있습니다.

     

    1. 멀티스레드라고 여러 개의 스레드가 한 cpu에서 동시에 실행되는 것이 아니다. (한 개의 cpu 기준. 하이퍼스레딩 제외)

    하나의 cpu는 항상 특정 시점에 한 스레드만 실행하고, 문맥 전환(context switching)이 빠르게 되면서 모든 프로그램이 동시에 수행되는 것처럼 보이는 것이다. 

    게임 내 특정 시점에 하나의 스레드에서만 step을 할 수 있는 이유입니다.

    2. cpu는 코드 라인이 아닌 "인스트럭션" 단위로 일을 처리한다.

    하나의 코드 라인은 컴파일 과정을 거치면서 여러 인스트럭션이 될 것이다. 언제든 thread 0에서 특정 인스트럭션을 실행하고 thread 1의 인스트럭션을 실행할 수 있기 때문에, 특정 코드 라인에 대입하면 라인을 중간쯤 실행하다가 다른 thread로 실행 흐름이 넘어가는 경우가 있다. 

    Tutorial 2에서 다루지만 중요하다고 생각해서 한 번 더 다뤄보았습니다.

     

     

    아무튼 유익한 사이트였습니다.

     

    다음번에 나머지 문제들도 풀어봐야겠습니다. 오늘은 여기서 끝!

    댓글

Designed by Tistory.