동기화 문제 동기화 문제란 서로 다른 process/thread가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하는 문제이다. 한 순간에 하나의 process/thread만 해당 자원에 접근하고 조작할 수 있도록 보장해야 한다. 다시 말해서 process/thread들이 동기화되도록 할 필요가 있다. 임계 영역 둘 이상의 process/thread가 동시에 동일한 자원에 접근하도록 하는 프로그램 코드 부분을 의미한다. 임계 구역의 원자성을 보장하기 위해 임계구역으로 진입 허가를 요청하는 부분을 entry section이라고 하고, 임계 영역이 끝나고나면 exit section으로 퇴출하게 된다. 대표적인 동기화 방법으로 Mutex와 Semaphore가 있다. Mutex mutal exclusio..
프로세스 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 특징 운영체제로부터 독립된 메모리 영역을 할당받는다. 다른 프로세스의 자원에 접근하지 않음! 프로세스들은 독립적이기 때문에 통신하기 위해 IPC를 사용해야 한다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다. 문제점 프로세스 생성에 큰 오버헤드가 있다. (프로세스를 생성할 때 많은 시간이 소요됨) 프로세스 컨텍스트 스위칭의 비효율성, 오버헤드가 큼 프로세스 사이에 통신이 어렵다는 점 (IPC 사용해야 함) 쓰레드 프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위 출현 목적 프로세스보다 크기가 작은 실행 단위 필요 프로세스의 생성 및 소멸에 따른 오버헤드 감소 빠른 컨텍스트 스위칭 프로세스들의 통신 시간, 방법 어려움 해소 ..
루틴의 종류 우선 루틴의 종류에 대해 살펴보면 메인루틴, 서브루틴, 코루틴이 있다. 메인루틴: main 함수에 의해서 수행되는 프로그램의 흐름 서브루틴: main 함수 안에서 실행되는 개별함수들에 의해서 수행되는 흐름 즉 함수는 루틴의 한 종류이다! -> 보통 루틴은 일직선적인 흐름을 가지고 있다. 코루틴 특징은 일직선적인 흐름을 중간에 suspend해서 지연을 시켰다가 resume을 통해 다시 재시작하는 것이 가능하다는 점이다. 코루틴을 사용하면 이미 실행이 되었더라도 다른 루틴이 실행되는 동안 잠시 suspend를 시켰다가 바쁜게 끝나고 나면 다시 멈춘 곳에서부터 다시 재시작해서 나머지 작업을 끝내는 비동기 프로그래밍이 가능하게 된다. 코루틴은 스레드가 아니다. 코루틴 구조 Coroutine Scop..