반응형
[루아스크립트/프로그래밍]루아(LUA)Thread 에 대하여



thread 가 무엇인지 잘 모르시는 , 이해가 잘 않되시는분들을 위하여 thread에 대하여 잠깐 적고 넘어가겠습니다.


윈도우즈에서 하나의 프로그램을 실행하면 하나(때에 따라서 하나이상)의 프로세스를 만듭니다. 이 프로세스는 CPU가 아닙니다. 실행 하나라고 보시면 됩니다.

어떤 프로세스가 CPU를 점유하게 되면 다른 프로세스는 멈추게 됩니다.

쉽게 생각하여 무한 루프를 돌리는 코드가 돌고 있다고 생각해보면, 이 무한루프는 컴퓨터의 CPU자원을 혼자 사용하게 됩니다

그러므로 다른 프로세스는 멈추어 있어야 합니다. 컴퓨터가 아무리 성능이 좋아도 하나의 프로세스를 돌리면 다른 프로세스는 순간적으로 멈추어야 합니다.

 

그러면, 여러 프로세스가 동시에 같이 돌아야 하는 상황에서는 어떨까요? 솔직히 이는 불가능 합니다. 동시라는 것은 과학적 물리적 시간에서 정확한 동시여야 하지만, 우리는 컴퓨터 프로그램에서 동시에 라고 하면 해당 컴퓨터를 운영하는 사람이 인지못하는 범위에서 약간의 시간을 주고 조금조금씩 수행하는 것을 의미 합니다.

 

우리가 벽돌로 두개의 탑을 쌓는다고 생각해보죠. 물론 두손으로 동시에 벽돌 하나씩 양손에 쥐고 쌓으면 됩니다. 그러나 컴퓨터는 손이 하나입니다. 즉 손이 하나라고 생각해보죠. 그러면 한번에 벽돌 하나만 집어 두 탑중 한곳에 쌓아야 합니다.

간단하게 하기 위하여 두개의 탑을 1 과 2라고 생각해보조.

한번 벽돌을 집어 탑 1 에 올립니다. 다음번 벽돌을 집어 탑2에 올립니다. 다시 벽돌을 집어 탑 1에 올립니다.

이러한 과정을 계속 하다 보면 탑1 과 탑2 가 동시에 올라가는 것을 경험할 수 있습니다.

어느 탑을 우선시 하느냐에 따라 탑이 동시에 올라가도 그 속도는 차이가 있을 수 있습니다만. 어쨌든 동시에라는 것은 이러한 약간의 시간차를 두면서 거의 동시에 올라가는 것을 의미 합니다.

 

우리가 벽돌을 손으로 집어 탑에 올리는 동작을 컴퓨터에서는 프로세스 라고 합니다. 이러한 프로세스를 두개의 탑에 쌓거나

아니면 두개의 프로세스를 만들어 탑을 쌓는것이 우리가 말하는 thread 입니다.

 

일반적인 프로세스는 한번 프로세스에 들어가면 idle상태(대기상태) 가 될때까지 멈추지 못합니다. 멈춘다면 컴퓨터가 멈추는, 흔히 "프로그램이 죽었다, 다운됬다" 하는 상황이 되는 것 입니다. 살아 있는 프로세스는 계속 도는 것입니다. 설령 그 프로세스가 idle(대기 상태)에 있어도 말입니다.

 

이러한 일반적인 프로세스는 스레드가 아닙니다.

동시에 돌아가는 프로세스가 필요합니다.

어떤 프로세스가 진행, 즉 자신의 고유한 일을 하다가 어느순간 잠시 멈추어 CPU 점유를 풀어주고 다른 프로세스에게 넘겨 주는 작업이 있고, 다시 다른 프로세스가 멈추어 있을때 자신이 멈추었던 것을 이어서 계속 진행할 수 있는 프로세스가 필요합니다.

이러한 프로세스를 스레드(Thread) 또는 스레드 프로세스라고 합니다.

다른말로는 Coroutine 이라고도 합니다.

 

추후 설명하겠지만, 루아에서는 thread라기 보다는 coroutine 이라는 말이 더 적합한 형태 입니다.

루아는 가상 머신입니다. 이러한 가상머신에서 스레드같이 돌도록 하는 것을 coroutine이라는 것으로 처리하고 있습니다.

 

스레드는 다음과 같은 동작을 할수 있는 프로세스 입니다.

 

  1. 스레드의 생성     -- create
  2. 스레드의 실행     -- execute
  3. 스레드의 정지     -- suspend, yielding
  4. 스레드의 재실행  -- resume
  5. 스레드의 종료     -- terminate / dead

일반적인 프로세스는 생성-실행-종료  의 단계만 있습니다. 그러나 스레드 프로세스는 정지 및 재실행 , 즉 suspending, resume 이라는 상태를 더 가지고 있습니다.

이를 이용하여 여러가지의 일을 동시에 처리하는 능력을 부여하는 것이죠.

+ Recent posts