Search
Duplicate
📒

[OS Stduy] 01-2. 프로세싱의 발전(멀티 프로세스, 스레드)

상태
완료
수업
OS Study
주제
4 more properties
참고

프로세싱의 발전 과정

NOTE
프로세싱(Procession)의 발전 과정은 컴퓨터 하드웨어와 소프트웨어의 발전과 함께 이루어져 왔습니다. 프로세스의 발전은 컴퓨팅 성능을 향상시키고, 다양한 시스템을 가능하게 했습니다.
초기에는 CPU가 1코어 였으며, 하나의 흐름에서 모든 작업을 실행했습니다. 하지만 하나의 흐름으로 작업을 처리하는것은 많은 한계가 있습니다.
1. I/O가 발생하는 경우 그만큼 CPU가 대기상태에 빠진다.
2. 여러 프로세스를 실행하는 경우 하나의 코어에서 실행하려면 번갈아가며 실행해야 한다.

멀티 태스킹

NOTE
멀티 태스킹은 CPU가 매우 빠르게 두 프로그램의 코드를 번갈아가며 수행해서 두 프로그램이 동시에 실행되는 것처럼 느껴지게 해주는 방법입니다.
하나의 흐름으로 여러 작업을 수행하는것과 같은 퍼포먼스를 낼 수 있다.
하나의 흐름으로 여러 작업을 수행하는것과 같은 퍼포먼스를 낼 수 있다.
각 프로그램의 실행 시간을 분할해서 마치 동시에 실행되는 것 처럼 하는 기법을 시분할 기법이라 합니다.
이러한 방식을 사용하면 하나의 코어에서도 여러 프로그램이 동시에 실행되는 것처럼 느껴질 수 있으며, 이렇게 하나의 컴퓨터 시스템에서 동시에 여러 작업을 수행하는 능력을 멀티 태스킹이라 합니다.
하지만 응답성을 향상시키기 위해 CS(Context Switching)이 자주 일어나는건 성능 이슈가 발생하게 될 수 있다.

멀티 프로세싱

NOTE
멀티 프로세싱은 멀티 태스킹과 달리 하드웨어 기술의 발전으로 CPU의 코어가 늘어나 여러 작업을 처리하는 기술을 의미합니다.
멀티 프로세싱은 실제로 일하는 사람이 늘어났다고 보면 된다.
멀티 프로세스는 하나의 프로그램이 여러 프로세스로 분할되고, 각각의 프로세스가 다른 CPU에서 실행됩니다. (실제로는 멀티 스레드를 사용합니다.)
하지만 프로세스간의 자원 공유는 IPC기술을 통해 가능하다고 해도 비용이 크다.
프로세스간 자원 공유는 상당히 어렵다.

멀티 스레딩

NOTE
멀티 스레딩은 하나의 프로세스 내에서 여러 스레드를 동시에 실행하여 작업을 병렬로 처리하는 기술입니다. 스레드는 프로세스 내에서 실행되는 가장 작은 실행단위로, 이를 통해 프로세스는 여러 작업을 동시에 수행할 수 있습니다.
쓰레드 예시(웹 서버) ⇒ 네트워크/DB 작업을 하면서 사용자와의 상호작용도 가능
스레드는 프로세스 내에서 생성되기 때문에 프로세스 보다 생성 및 종료가 빠르며 힙 영역의 자원을 공유할 수 있습니다.
프로세스보다 컨텍스트 스위칭 비용이 훨씬 적습니다. 프로세스의 경우 CPU 캐시에 있는 내용을 모두 초기화해야하지만, 스레드의 경우 스레드 정보에 대해서만 교체하면 되기 때문입니다.

멀티 스레딩 단점

자원 공유가 된다 ⇒ 하나가 문제 생기면 다른것도 이상이 생긴다.
1.
멀티 프로세스는 각 프로세스가 독립적이므로 문제가 발생해도 다른 프로세스들은 영향을 받지 않지만, 스레드는 다른 스레드에게 영향을 준다!
2.
여러 개의 스레드가 공유 자원(임계 영역)에 접근할 수 있기에 동기화 문제가 발생할 수 있다.
임계 영역에 대해 뮤텍스, 세마포어 등을 사용해 해결한다.
3.
결국 CS의 비용이 존재하므로 스레드의 개수는 신중하게 생각해야 합니다.

멀티 프로세스 vs 멀티 스레드 비교

NOTE
fork로 3개 실행 vs 스레드로 3개
멀티 스레드 쪽이 더 자원을 효율적으로 공유하며 사용한다!

CPU bound& IO bonud - 스레드 튜닝

NOTE
스레드는 많이 사용해서 무조건 좋지는 않습니다. CPU 바운드와 I/O 바운드 작업의 작업 특성에 따라 시스템 자원을 다르게 소비하기 때문에 최적의 성능을 위해서는 작업의 특성에 맞게 스레드를 관리해야 합니다.
멀티 쓰레드는 IO작업동안 다른 작업에게 자원할당이 가능해서 많으면 이점이 있다!

CPU 바운드 작업

CPU 바운드 작업은 CPU 연산을 집중적으로 사용하며, 복잡한 계산이나 데이터 압축에 주로 사용됩니다. 대부분의 시간을 계산 작업을 수행하는데 사용하므로 CPU의 처리 시간이 작업 속도에 영향을 끼칩니다.
CPU 바운드 작업의 경우, 스레드 수를 CPU 코어 수와 동일하게 유지해서 오버헤드를 최소화 하는 것이 좋습니다.
스레드가 많아지는 만큼 문맥 교환이 빈번하게 발생하게 되어 실제 작업 시간이 줄어들 수 있습니다.

I/O 바운드 작업

I/O 바운드 작업은 CPU보다 데이터 전송에 많은 시간을 소비하는 작업입니다. 주로 파일 읽기/쓰기, 네트워크 통신, 데이터베이스 쿼리 등이 이에 해당합니다.
I/O 바운드 작업은 입출력 작업이 대기 상태가 많아, 더 많은 스레드를 생성하면 동시에 여러 I/O 작업을 처리할 수 있습니다.
비동기적이고 논 블록킹 I/O 모델을 사용하여 I/O 요청을 보낸 후 바로 다른 작업을 수행할 수 있습니다.