멀티 쓰레드 (Multi Thread)
멀티 쓰레드 (Multi thread)는 하나의 프로세스를 여러 개의 조각 (쓰레드)으로 나누어 동시에 실행하는 것을 의미합니다. 오늘날 대부분의 컴퓨터 프로그램은 멀티 쓰레드를 사용하여 작업을 나누어서 동시에 실행함으로서 보다 빠르고 효율적으로 실행하고 있습니다.
예를 들어, 웹 브라우저를 사용할 때, 파일을 다운로드하거나 여러 개의 웹 페이지를 띄워도 사용자는 이전 작업이 완료될 때까지 기다리지 않아도 다른 작업을 계속 진행할 수 있습니다. 이것은 웹 브라우저의 프로그램 (프로세스)이 멀티 쓰레드로 구성되어 동시에 여러 작업을 수행할 수 있기 때문입니다.
실제로 윈도우의 작업 관리자를 열어보면, 하나의 프로그램이 여러 개의 쓰레드로 실행됨을 알 수 있습니다.

CPU의 코어 1개는 한번에 하나의 작업만 실행할 수 있습니다. 예를 들어 인텔 i5-12400 CPU는 6개의 코어를 가지고 있으므로 최대 6개의 작업을 동시에 실행할 수 있습니다.
그렇다면 이 경우 최대 6개의 프로세스 또는 쓰레드만 실행이 가능할까요? 그렇지 않습니다. 우리는 게임을 하면서 동영상을 시청하거나 웹서핑을 동시에 할 수 있으며 이 경우, 수십개의 프로세스 또는 수백개의 쓰레드가 동시에 실행되고 있습니다.
CPU의 코어 1개는 한번에 하나의 작업만 실행이 가능하지만 윈도우 또는 리눅스와 같은 운영체제는 여러 개의 프로세스 또는 쓰레드를 번갈아 가면서 CPU에 할당하여 실행시키며 그 속도가 매우 빠르기 때문에 동시에 실행되는 것처럼 보이는 것입니다.
CPU의 할당 순서 및 방법을 결정하는 것을 스케쥴링 (Scheduling), CPU에 할당된 작업을 변경하는 것을 컨텍스트 스위칭(Context Switching)이라고 합니다.
그래블로의 소프트웨어는 리눅스 운영체제에서 실행되므로 그래블로의 로직은 각각의 개별적인 쓰레드로 실행되어 동시에 실행이 가능합니다.
그러나 멀티 쓰레드는 실제로 동시에 실행되는 것이 아니라 아주 빠른 속도로 번갈아가면서 실행하는 것이기 때문에 CPU의 성능 또는 작업의 내용에 따라 실행 시간이 변할 수 있는 단점이 있습니다. 사양이 낮은 PC에서 포토샵과 같은 무거운 프로그램을 돌리거나 많은 갯수의 프로그램을 실행하면 전체적인 속도가 저하되는 것도 이러한 이유입니다.
그렇기 때문에 그래블로의 로직의 실행 주기는 경우에 따라 설정한 주기보다 길어질 수 있습니다. 예를 들어 로직이 0.1초 (100밀리초) 마다 실행되도록 설정했다면, 실제 실행 주기는 100밀리초를 초과할 수도 있습니다. 하드웨어가 사양이 낮거나 CPU 점유율이 높을수록 오차가 커지며, 하드웨어 사양이 높거나 또는 CPU점유율이 낮을수록 오차가 작아집니다. 오차 수준은 실행 환경에 따라 다를 수 있으나 일반적 사용 조건에서는 0~3밀리초 이며 대부분의 경우 사용하는데 문제가 없는 수준입니다.
만약 구현하고자 하는 내용이 1밀리초 이내의 매우 정확한 타이밍이 필요한 경우에는 그래블로는 적합하지 않으며 실시간 운영체제를 이용해야 합니다.