[OS]Day4

멀티 스레딩

코드와 데이터 영역을 공유하기 때문에 shared memory가 따로 필요하지않고 생성 리소스도 훨씬 작고, context switching 비용도 적게든다. 전체적으로 리소스 효율이 좋고 확장성도 좋다.

또한 프로세스에 대한 요청을 처리할 때 스레드를 생성해서  non-blocking으로 빠르게 처리할 수 있다.

 

멀티 코어 프로그래밍

이전에 공부했던 멀티 프로그래밍은 여러 개의 프로그램이 동시에 돌아가는 것 처럼 보이는 방법이었다.

하지만 멀티 코어 프로그래밍은 코어가 여러 개이기 때문에 실제로 동시에 프로그램을 실행할 수 있다.

이러한 방법을 병렬 실행 Parallel execution이라고 한다.

 

동시 실행을 할 경우의 문제.

  • 어떤 작업을 병렬로 작업할 수 있는가? 
    • 작업을 동시에 처리해야 성능이 향상되는 경우
  • 밸런스를 어떻게 맞출 것인가?
    • 작업의 크기와 복잡성, 자원의 가용성을 고려해야한다.
  • 데이터를 어떻게 나눌 것인가? 
    • 데이터를 적절한 크기로 분할하여 각 작업에 할당해야 한다.
  • 의존성 처리를 어떻게 할 것인가? 
    • 작업 간의 의존성을 관리하여 올바른 순서로 실행되도록 보장해야 한다.
    • 일부 작업은 다른 작업의 결과를 기다려야 하므로, 동기화 등을 통해 해결해야한다. 
  • 테스트와 디버깅이 어려워진다. 

 

코어가 많을 수록 속도가 빨라지는가?

코어가 많아질 수록 scheduling 오버헤드도 커지기 때문에 코어가 많다고 무조건 좋은 것은 아니다.

예시로 코어가 2개면 1.6배, 4개면 2.28배 이런식으로 개수가 많아질 수록 상승폭이 줄어든다. 너무 많아지면 오히려 속도가 느려질 수도 있다.

 

 

Implicit Threading 

암묵적 스레딩이란, 개발자가 명시적으로 Thread를 생성하는 것이 아닌 생성 관리를 라이브러리가 해주는 방법이다.

 

Thread Pool

그때 그때 스레드를 계속 생성하고 삭제한다면 리소스가 많이 필요하기 때문에 미리 생성된 스레드 집합을 통해 재사용하며 관리한다

'개념 정리 > OS' 카테고리의 다른 글

[OS]Day6  (0) 2023.08.16
[OS]Day5  (0) 2023.08.14
[OS] Day3  (0) 2023.08.09
[OS] Day2  (0) 2023.08.08
[OS] Day 1  (0) 2023.08.08