• 스레드를 사용하는 이유
    • Thread란 실행 코드를 실행시킨다. 단, 불확실성을 가진다. (추후 스레드 경쟁조건 글 작성 예정)
      스레드, 프로세스가 궁금하다면?
      • OS가 만든 스레드: 커널 스레드
      • 개발자가 만든 스레드: 유저 스레드

cpu에 user thread 1개만 할당되어 실행시키는 상황

 

  • 다중(동시성) 프로그래밍
    • 프로세서가 항상 수행할 작업을 가지도록 하여 프로세스 이용률을 증가시키는 방법.

CPU 1개에서 여러 스레드를 순차적으로 동시에 처리

  • 위 그림은 CPU 1개, 1개 주기억 장소에 여러 개 여러 개 프로그램이 존재하여 동시 작업을 처리하는 상황
  • 특징
    • 한 시점에 운영체제가 여러 작업을 메모리에 적재 후 실행한다.
    • 한 프로세스가 입출력을 실행하는 동안 다른 프로세스에 CPU를 할당하여 실행 가능 (운영체제의 목적인 시스템 자원을 효율적 사용, CPU가 항상 일할수 있다, 다만 콘텍스트 스위칭 비용 고려해야 한다.

  • 다중 처리 시스템(병렬 처리 시스템)은 같은 처리를 여러 스레드에서 병렬적으로 처리하면 즉, CPU 유휴시간(idle time) 이 짧아지고 여러 개의 프로그램을 동시에 기억장치에 적재시키기 때문에 CPU가 일이 있는데 놀지 않는다. 즉, 성능이 빨라진다. 

2개 이상의 CPU가 동시에 2개 이상의 스레드를 처리

  • 하지만 항상 그런 건 아니다. CPU개수보다 처리해야 할 프로세스, 스레드 개수가 많다면 CPU를 사용하기 전까지 대기가 발생한다.

  • 이 대기시간과 성능이 빨라지는 스레드 적정 개수(황금비?)를 찾아야 한다. 즉, N개의 CPU가 있다고 N배의 성능 향상이 되지는 않는다.

  • 다중 처리 시스템은 또 SMP(공통 메모리 이용 방식), MPP(각 프로세서가 전용 메모리 사용 방식)으로 나뉜다.

참조: http://www.kma.go.kr/aboutkma/intro/supercom/super/super_category.jsp?printable=true&

  • SMP(통 메모리 이용 방식)은 프로세스의 수가 CPU보다 많은 경우(대부분의 경우가 이렇다.),
    나머지 프로세스들은 실행되기 위해서 CPU를 사용할 수 있을 때까지 기다려야 한다.

  • MPP(분산 메모리 시스템)은 동시에 많은 프로세스가 각각 CPU 프로세스 메모리 내에 존재하며, 다른 대기 중인 프로세스가 있을 때 미리 할당된 CPU를 사용하도록 한다. (Connection Pool)과 동일. (다만 미리 할당된 노드 개수가 모두 사용 중이면 병목(정책에 따라 대기 상황 또는 새로 connection 생성 비용)이 발생한다.)

 

  • 최종 정리하자면
    • Concurrent(동시성) programming은 일반적으로 정의한 작업이 어떤 순서로든 발생할 수 있는 환경을 의미합니다. 하나의 작업이 다른 작업 전후에 발생할 수 있으며 일부 또는 모든 작업을 동시에 수행할 수 있습니다.
    • Parallel(병렬) programming은 다른 프로세서에서 동시 작업을 동시에 실행하는 것을 구체적으로 말합니다. 따라서 모든 병렬 프로그래밍은 동시이지만 모든 동시 프로그래밍이 병렬인 것은 아닙니다.
    •  즉, 잘 작성된 동시 프로그램(순서 상관없이 일정한 계산)은 멀티 프로세서에서 효율적으로 병렬로 실행될 수 있습니다. 

+ Recent posts