강의노트 14-2. 멀티스레드

|

패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

multithreading

  • 프로세스 : 현재 실행중인 프로그램 (RAM에 올라와있다.)
  • 프로그램은 하나지만 프로세스는 여러개를 띄울 수 있다 (메모장 여러개 띄우기) 그리고 각각 가상 주소공간을 할당받는다. (모든 프로세스는 각각 4G의 가상 주소 공간 (메모리공간X) 을 부여받는다. (code, data, heap, stack)
  • 쓰레드(thread) : 프로세스에 시간이라는 개념을 추가, 프로세스에서의 실행 흐름
  • 싱글스레드 (single thread) : 시간이 흐르면서 실행되는 코드의 줄기가 하나 (코드를 위에서부터 한줄한줄 해석)
  • 멀티스레드 (multi thread) : 동시에 여러개의 코드를 실행 (A코드 1번줄, B코드 1번줄 … 5ms 마다 반복)
  • 컴퓨터의 cpu는 한 쓰레드 밖에 처리하지 못하지만 빠르게 진행되기 때문에 사람 눈에는 동시처럼 보인다.
  • 멀티쓰레드는 순서가 없다.
  • 싱글쓰레드보다 멀티쓰레드가 빠르다 (하지만 크게 차이나지는 않는다.)

context switching

  • 각 스레드마다 데이터 저장공간을 따로 마련하고, cpu안의 register 정보를 해당 저장공간에 저장한다.
  • 프로세스는 독립적인 메모리공간을 갖기 때문에 서로 통신하려면 IPC를 통해야 한다.
  • 프로세스가 여러개가 병렬적으로 실행(멀티스레드)되기 위해서는 독립적인 메모리 공간으로 컨텍스트 스위칭이 발생한다.

메모리공간에서의 스레드

views
메모리 공간에서의 스레드
  • 쓰레드는 프로세스의 heap, static, code 영역을 공유한다.
  • 각각의 프로세스가 독립적인 stack, heap, code, data 영역을 가진 반면에, 한 프로세스에 속한 쓰레드는 stack 영역을 제외한 메모리 영역은 공유한다.
  • 쓰레드간에 IPC 없이도 통신이 가능하다. (프로세스 간의 통신보다 스레드 간의 통신 비용이 적다) (스레드 간의 통신시 데이터를 주고받는 방법은 메모리 공간을 공유하므로 데이터 세그먼트, 즉 전역 변수를 이용하여 규현한다.)
  • 쓰레드는 공유하고 있는 메모리 영역 덕분에 컨텍스트 스위칭 때문에 발생하는 오버헤드(overhead)가 프로세스에 비해 적다.
  • 멀티 스레드로 작업을 실행하는 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.

race condition, mutual exclusion

  • 경합조건 (race condition) : 다중 프로그래밍 시스템이나 다중 처리기 시스템에서 두 명령어가 동시에 같은 기억 장소를 액세스할 때 그들 사이의 경쟁에 의해 수행 결과를 예측할 수 없게 되는 것.
  • 상호배제 (mutual exclusion) : 여러 개의 병렬 프로세스가 공통의 변수 또는 자원에 접근할 때 그 조작을 정당하게 실행하기 위하여 접근 중인 임의의 시점에서 하나의 프로세스만이 그 접근을 허용하도록 제어하는 것.

참고