임계 영역과 뮤텍스 데이터 레이스(data race)라는 개념을 이전 글에서 언급한 바있다. 이는 두개 이상의 스레드가 하나의 변수를 사용할 경우 변수에 대한 IO 주도권이 모호해지기에 데이터 충돌이 날 수 있기 때문이다. 이러한 상태를 경쟁 상태라고도 불리기도 하며 경쟁 상태는 여러 방법으로 해결할 수 있다. 뮤텍스 (Mutex) 경쟁 상태를 해결하는 대표적인 방법이 뮤텍스(mutex)이다. 상호 배제(mutural exclusion)의 준말인 뮤텍스의 개념은 굉장히 간단하다. 스레드에서 어떤 정보를 사용하는 동안 다른 스레드는 해당 정보에 접근이 불가능하다. 즉, 하나의 스레드가 특정 데이터를 사용할때, 뮤텍스의 시작을 선언("락을 건다"라고 표현한다.)하면 뮤텍스가 선언된 명령줄부터 뮤텍스가 해제(..

스레드의 동작 원리 멀티스레드, 싱글스레드라고 부르며 작업을 동시에 처리하는 기술이라고만 알고 있는 스레드에 대해 조금 더 알아보자. 우선 단일 코어 CPU가 달린 컴퓨터가 있다고 생각하자. 이런 환경에서 프로세스나 여러 스레드가 동시에 실행될 수 있을까? 만약 A 작업과 B 작업을 동시에 진행시킨다면 어떻게 처리할까. 우선 사람이라면 보통 작업의 순서가 정해져있지 않는 이상 하나의 작업을 완료하고 다른 작업을 진행할 것이다. 하지만 우리가 다루는 컴퓨터는 사람과 동일하게 생각하지 않는다. 컴퓨터는 하나의 작업을 하면서 여유가 생기는 찰나의 순간 다른 작업을 진행하려 한다. 즉, 여러 프로세스와 스레드들을 동시에 실행하는 운영체제는 일정 시간마다 번갈아가며 스레드들을 실행한다. 이렇게 스레드를 변경하며 ..
이전 글에서 스레드에 대해 이해했다. 이번 장에서는 멀티스레드 프로그래밍이 어디서 어떻게 사용될지 알아보자. 멀티스레드는 언제 사용되는가? 단일 스레드에서 작업하던 사람들은 멀티 스레드를 접하면 "동시에 여러 작업이 한번에 처리된다."라는 개념에 신선함을 느낄 수 있지만, 멀티스레드는 남용되면 굉장히 골치가 아파진다. 이는 멀티스레드를 어떻게 사용하는가에 따라 단일 스레드보다도 못한 성능이 나올 수도 있기도 하며, 심각하게는 조금만 실수해도 프로그램이 중단되는 오류가 될 수도 있기 때문이다. 그렇다면 멀티스레드는 어디서 사용되야하는가? 대표적으로는 다음과 같은 상황들이 있다. 오래 걸리는 일 하나와 빨리 끝나는 일 여럿을 동시에 처리하는 경우 긴 작업을 진행하는 동안 다른 짧은 일을 처리하는 경우 기기의..

컴퓨터에서 일어나는 작업들 프로그램(program)은 컴퓨터에서 실행되는 명령어들의 모음이며 코드(code)와 데이터(data)로 구성되어 있다. 이러한 프로그램을 실행시키면 프로그램 안의 명령어들이 한 줄씩 실행되며 활동을하고 이를 프로세스(process)라고 한다. 프로그램은 보조 기억 장치에 저장되고 프로세스는 RAM 메모리에 할당된다. 하여 프로그램은 코드와 데이터를 프로세스 메모리로 로딩하여 불러들이기 위해 드라이브에서 메모리로 데이터를 불러들여 힙(heap)과 스택(stack) 메모리 공간에 할당한다. 프로그램은 여러 개가 동시에 실행할 수 있고 이를 멀티프로세싱(Multi-Processing)이라고 한다. 스레드 (Thread) 각 프로세스는 시스템의 종류, 프로세스의 특징에 따라 OS가 할..