Backend/OS

[OS] Process Management (3) _ 쓰레드, 쓰레드 동기화, 세마포어

lakelight 2022. 7. 31. 15:54
728x90
반응형

쓰레드

프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스는 한 개 이상의 쓰레드가 존재하며, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다.

 

멀티 쓰레드

쓰레드들이 서로 스위칭 하면서 작업을 처리함으로써 CPU 사용률을 향상시켜주고, 자원을 보다 효율적으로 사용할 수 있습니다. 또한 사용자에 대한 응답성이 높고, 작업이 분리되어 코드간결해집니다. 하지만 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화, 교착상태 같은 문제를 조심해야 합니다.

 

쓰레드 구현

 

[Java] Thread

Thread 하드디스크에 있는 '프로그램'이 실행되어 메모리에 올라가면 '프로세스'가 됩니다. CPU는 프로세스를 처리합니다. 프로세스를 처리할 때 CPU의 실행 단위는 쓰레드입니다. 즉 쓰레

lakelight.tistory.com

 

쓰레드 동기화

하나의 코드블록 또는 메소드를 한 순간에 하나의 쓰레드만이 이용하도록 보장하는 것으로 임계 영역에서 스레드들이 순서를 갖춰 자원을 사용하게 하는 것을 동기화라고 합니다.

 

쓰레드 동기화를 하지 않았을 때의 문제점과 해결 방법

[쓰레드 동기화 관련 은행 계좌시스템 문제]

 

[Java] Thread Synchronization

Thread Synchronization 두 개의 쓰레드가 동일한 객체에 접근을 하려고 할 때 공유 자원을 lock하여 다른 쓰레드가 접근하지 못하게 합니다. 그래서 두 개의 쓰레드가 공유자원에 동시에 접근하여 발생

lakelight.tistory.com

 

임계 구역

멀티 쓰레드에 의해 공유자원서로 참조될 수 있는 코드의 범위를 말합니다. 즉, 한 쓰레드가 작업중 다른 쓰레드에 의해 간섭을 받지 않는 영역을 말합니다. 그리고 이 영역을 간섭하지 못하도록 하는 것을 동기화라고 합니다. 그리고 임계 구역에 대한 접근을 막기위해 Locking 매커니즘이 필요합니다.

 

임계 구역 문제 해결 방법

  1. 상호배제 (Mutual Exclusion)
    오류가 발생하지 않기 위해 데이터에 대한 업데이트는 한 순간에 오직 한 쓰레드만이 진행할 수 있다는 의미입니다.
  2. 진행 (Progress)
    두 쓰레드 중 누가 먼저 작업을 수행할 것인지에 대한 결정이 유한 시간 내에 일어나야 한다는 의미입니다. 
  3. 유한대기 (Bounded Waiting)
    쓰레드가 임계 구역에 유한 시간 내에 접근을 해야한다는 의미입니다.

 

세마포어

임계 구역에 여러 쓰레드가 들어갈 수 있습니다. counter를 두어서 동시에 리소스에 접근할 수 있는 허용 가능한 쓰레드 수를 제어합니다. 동작으로는 정수 값을 감소시키는 acquire() , 정수 값을 증가시키는 release() 가 있습니다. 

정수는 초기에 1로 되어있고, 쓰레드가 들어오면 acquire()를 호출해서 정수 값을 감소시킵니다. 그럼 정수 값은 0이 됩니다. 정수 값이 0인 쓰레드는 임계 구역에서 작업을 수행하고 있음을 의미합니다. 그리고 쓰레드가 하나 더 임계구역에 접근하려고 하면 acquire()을 호출해서 세마포어에 들어오는 쓰레드의 정수 값이 -1이 됩니다. 정수 값이 0보다 작은 쓰레드는 대기 시킵니다. 그리고 처리되고 있던 0번 쓰레드가 작업이 끝나면 release()를 호출하면 다른 쓰레드들의 정수값을 모두 1증가시킵니다. 그러면 -1 이었던 쓰레드가 0이되고 그 쓰레드가 임계구역에 들어가서 작업을 수행하게 됩니다.

이런 식으로 쓰레드들이 임계구역을 사용할 수 있도록 합니다.

 

결론

멀티쓰레드가 어떻게 동작하는지 알아보았습니다.
멀티쓰레드를 사용할 때 동기화 문제가 생길 수 있고 이를 해결하기 위해 어떻게 해야하는지,
임계 구역이 무엇인지, 세마포어는 무엇인지 어떻게 동작하는지 알아보았습니다.

 

 

[참고]

1. 쓰레드 및 프로세스 동기화

2. 쓰레드의 개념

3. 쓰레드 동기화 문제

4. 세마포어

728x90
반응형