반응형


본 챕터 목표
: 다음 단골 CS 지식 문항에 대해 구체적으로 이해하고, 답변 준비하기

  1. 프로세스간에는 어떻게 통신하는지, 쓰레드와 비교해서 가능한 상세하게 설명해주세요.
  2. 프로세스와 쓰레드의 차이점에 대해 설명해주세요.
  3. 언제 멀티 프로세스를 사용하고, 언제 멀티 쓰레드를 써야하는지 가능한 구체적으로 설명해주세요.
  4. 쓰레드 동기화란 무엇이며 왜 사용해야하는지 예를 들어 설명해주세요.
  5. 뮤텍스와 세마포어의 차이점에 대해 간략히 설명해주세요.



Thread (스레드)
· Light Weight Process 라고도 함
· 프로세스

  • 프로세스 간에는 각 프로세스의 데이터 접근이 불가

· 스레드

  • 하나의 프로세스에 여러개의 스레드 생성 가능
  • 스레드들은 동시에 실행 가능
  • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
  • Thread는 개별 실행이 가능한 stack이 존재



현업, IT 기술과 컴퓨터공학의 이해
· 대부분의 프로그래밍 언어에서 중급 이후 과정에서는 반드시 나오는 기술이 Thread 프로그래밍 기법

  • 예: JAVA 언어에서도 Thread 프로그래밍 기법은 사용되는 기술 둥 하나임

· 멀티 프로세스와 멀티 Thread 프로그래밍은 성능 개선을 위해, 기술적으로 고려하는 구조임


Multi Thread (멀티 스레드)

  • 소프트웨어 병행 작업 처리를 위해 Multi Thread를 사용함


멀리 프로세싱과 Thread

  • 멀티 태스킹과 멀티 프로세싱
  • 최근 CPU는 멀티 코어를 가지므로, Thread를 여러 개 만들어, 멀티 코어의 활용도를 높임



· 최근에는 짧은 반응 시간이 우선시 되기 때문에 성능 개선에 중점을 둠

  • 멀티 프로세스 또는 멀티 쓰레드를 고려함

· 멀티 프로세스보다 쓰레드를 자연스럽게 더 많이 사용함

  • 멀티 프로세스는 처음 구조를 잡을 때 만들어야 하지만,
  • 쓰레드는 프로그램의 일부 동작에서만 사용하도록 일부 코드 수정으로도 가능하기 때문임



멀티 프로세스와 멀티 Thread

  • 여러가지 운영체제 타입



Thread 장점
· 사용자에 대한 응답성 향상
· 자원 공유 효율

  • IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요 없음
  • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능

· 작업이 분리되어 코드가 간결


Thread 단점
· 스레드 중 하나의 스레드만 문제가 있더라도, 전체 프로세스가 영향을 받음
· 스레드를 많이 생성하면, Context Switching이 자주 일어나서 성능 저하
· 예: 리눅스 OS에서는 Thread를 Process처럼 다룸

  • 스레드를 많이 생성하면, 모든 스레드를 스케쥴링해야 하므로, Context Switching이 빈번해짐

· 동기화 이슈로 비정상적으로 동작가능

  • 동기화 코드를 적절하게 추가해줘야 함



Thread vs Process

  • 프로세스는 독립적, 스레드는 프로세스의 서브넷
  • 프로세스는 각각 독립적인 자원을 가짐, 스레드는 프로세스 자원 공유
  • 프로세스는 자신만의 주소영역을 가짐, 스레드는 주소영역 공유
  • 프로세스간에는 IPC 기법으로 통신해야함, 스레드는 필요없음




정리
· Thread 개념 정리

  • 프로세스와 달리 스레드간 자원 공유

· 스레드 장점

  • 성능 개선 가능
  • 응답성 향상
  • 자원 공유 효율 (IPC를 안써도 됨)

· 스레드 단점

  • 하나의 스레드 문제가, 프로세스 전반에 영향을 미침
  • 동기화 이슈



동기화 (Synchronization) 이슈
· 동기화: 작업들 사이에 실행 시기를 맞추는 것
· 여러 스레드가 동일한 자원(데이터) 접근 시 동기화 이슈 발생

  • 동일 자원을 여러 스레드가 동시 수정 시, 각 스레드 결과에 영향을 줌


· Thread 프로그래밍 기법을 익힐 때, 꼭 익히는 기술 중 하나가 동기화 기법임

  • 이 때, 동기화가 무엇이고, 동기화가 왜 필요한지에 대한 상세한 설명은 프로그래밍 언어 사용법에 나오지 않는 경우가 많음
  • 이유는 이미 알고 있다고 가정하기 때문임
  • 따라서, 운영체제에서 반드시 이해하고 넘어가야 관련 프로그래밍을 원활히 할 수 있음



동기화 이슈 해결 방안
· Mutual exclusion (상호 배제)
· 스레드는 프로세스의 모든 데이터에 접근할 수 있으므로,

  • 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access가 필요
  • 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시에 접근하지 못하도록 막음



Mutual exclusion (상호 배제)

  • 임계 자원 (critical resource)
  • 임계 영역 (critical section)
lock.acquire()
for i in range(100000):
    g_count += 1
lock.release()



현업, IT 기슬과 컴퓨터공항의 이해
· 스레드는 자주쓰는 일부 기능에 한해서 사용
· 스레드 구현시 동기화 코드를 누락하는 경우가 있음
· 코드가 복잡하므로, 어더에서 동기화 이슈가 발생하는지 놓치는 경우가 있음

  • 하지만 비정상 동작 시 이것이 동기화 이슈라고 바로 인지하고
  • 관련 코드를 찾아서 상호배제 코드를 넣을 수 있어야 함



반응형

+ Recent posts