1 분 소요

Thread

  • CPU 이용의 기본 단위이다.
  • 스레드 ID, Program Counter, 레지스터, 스택으로 이루어져 있다.
  • 같은 프로세스에 속한 스레드들은 data, code를 공유한다.

스레드 사용의 동기

  • 기존에는 다중 프로세스를 사용했다.
  • 하지만 프로세스 생성 비용, context switching 등 오버헤드가 너무 많이 생성돼 스레드를 사용하게 됐다.

다중 스레드의 장점

  1. 응답성 (Responsibility)
    • 연산을 분산함으로서 사용자 인터렉션 향상
  2. 자원 공유 (Resource Sharing)
    • 자원을 공유함으로서 여러 스레드를 생성할 수 있다.
  3. 경제성 (Economy)
    • 프로세스 관리보다 경제적이다.
  4. 규모 적응성 (Scalability)
    • multi processor에서는 스레드가 병렬로 실행되고
    • single processor에서는 단일 스레드로 실행된다.

다중코어 프로그래밍

  • 코어가 여러개인 시스템

    암달의 법칙
    아무리 코어의 수를 늘려도 성능 향상엔 한계가 있다.

  • 다중스레드는 병행성을 올린다.
  • 병행성은 스레드들이 병렬적으로 실행될 수 있다는 것을 의미한다.
  • 병행성은 하나 이상의 태스크를 지원한다는 것이고, 병렬성은 하나 이상의 태스크를 동시에 실행 한다는 것이다.

주의해야 할 점

  1. 태스크 인식 (Identifying Tasks)
    • task 단위로 분리 해야 한다.
  2. 균형 (Balance)
    • 균등한 기여도를 가지도록 분배해야 한다.
  3. 데이터 분리 (Data Splitting)
    • 데이터 또한 분리되어야 한다.
  4. 데이터 종속성 (Data Dependency)
    • 데이터 사용 시 종속성이 있는지 검토해야 한다.
  5. 시험 및 디버깅 (Testing and Debugging)

암묵적 스레딩

스레드 풀

  • 스레드 생성에 드는 시간을 줄이기 위해 사용
  • 스레드의 동시 실행 수를 제한할 수 있음.
    • 무한대이면 자원이 고갈 될 수 있음
  • 프로세스를 시작 할 때 일정 수의 스레드를 스레드풀에 만든다.
  • 모든 스레드가 일하고 있으면 free한 스레드가 나올 때까지 대기한다.

장점

  • 새로 스레드를 생성하는 것보다 빠르다.
  • 스레드 갯수에 제한을 둠으로서 많은 스레드의 병렬처리가 힘든 시스템에도 사용 가능하다.
  • 태스크 생성을 분리하면 태스크를 일정 시간 후에 실행하거나 주기적으로 실행시킬 수 있음.

Threading Issues

Fork, Exec

  • fork() : 모든 스레드를 복제하거나, 하나의 스레드를 복제한다.
  • exec() : 바로 프로세스 호출 시 하나의 스레드를 복제하고 (어차피 프로세스가 올 때 그 프로세스의 스레드로 덮어 씌워지기 때문에), 아니라면 하나의 스레드만 복제한다.

신호 처리 (Signal Handling)

  • UNIX기반의 프로세스에는 signal로 사건을 알린다.
  • 동기식 신호와 비동기식 신호로 나뉜다.
  • 동기식 신호는 신호를 발생시킨 프로세스에게 전달 되고,
  • 비동기식 신호는 외부에서 발생된 경우이기 때문에 외부 프로세스에게 전달된다.

스레드 취소

  1. 비동기식 취소
    • 한 프로세스가 target을 바로 강제 종료시킨다.
    • 자원 회수가 완전하지 않을 수 있다.
  2. 지연 취소
    • Target 프로세스가 스스로를 계속 점검함으로서 종료 할지 아닌지를 판단한다.
    • 안전 여부를 판단 가능하다.

카테고리:

업데이트: