⚡프로세스(Process)란?
프로세스는 운영체제에서 실행 중인 프로그램을 말한다. 간단히 말해, 컴퓨터에서 실행 중인 프로그램이 하나의 프로세스이다. 프로세스는 각자의 가상 메모리 공간을 할당 받아 실행되며, 서로 독립적으로 실행된다.
⚡스레드(Thread)란?
스레드는 프로세스 내에서 실행되는 작은 작업 단위이다. 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 프로세스의 가상 메모리 공간을 공유한다. 이 때, 각 스레드는 다른 스레드와 독립적으로 실행되지 않으며, 프로세스 내의 자원을 공유하게 된다.
⚡프로세스의 특징
프로세스는 운영 체제에서 실행되는 실행 단위로, 다음과 같은 특징을 가지고 있다.
- 자원의 독립성: 프로세스는 운영 체제로부터 자신만의 주소 공간, 스택, 레지스터, 파일 등의 자원을 할당받아 독립적으로 실행된다. 따라서 다른 프로세스와 독립적으로 실행되며, 자신의 자원을 관리할 수 있다.
- 스케줄링: 프로세스는 운영 체제에 의해 스케줄링되며, 시스템의 자원을 공유하는 다른 프로세스와의 실행 순서를 결정한다.! 스케줄링은 운영 체제에서 프로세스의 우선순위를 결정하고, 시스템 자원을 효율적으로 할당하여 시스템의 성능을 향상시킨다.
- 프로세스 간 통신: 프로세스는 운영 체제에서 실행되기 때문에, 다른 프로세스와의 상호작용이 필요할 때는 프로세스 간 통신(IPC)을 사용하여 데이터를 전송하거나 공유할 수 있다. 프로세스 간 통신은 파이프, 소켓, 공유 메모리 등의 다양한 방법으로 이루어진다.
- 보안성: 프로세스는 운영 체제로부터 자신만의 자원을 할당받기 때문에, 다른 프로세스나 사용자로부터의 침해를 방지할 수 있다. 각 프로세스는 자신의 메모리 공간을 다른 프로세스에서 접근할 수 없도록 보호할 수 있다.
- 독립성: 프로세스는 각각의 주소 공간을 가지기 때문에, 독립적으로 실행될 수 있다. 따라서 한 프로세스에서 오류가 발생하더라도 다른 프로세스에는 영향을 미치지 않는다.
위와 같은 특징들로 인해 사용되는곳에 대표적으로 웹 브라우저, 워드 프로세스, 게임, 데이터 베이스 등이 존재 한다.
⚡멀티 프로세스
멀티 프로세스란, 하나 이상의 프로세스가 동시에 실행되는 것을 말한다. 이는 운영 체제에서 여러 개의 프로세스를 동시에 실행하는 기술을 말하며, 각각의 프로세스는 독립적으로 실행된다. 이러한 멀티 프로세스는 다양한 용도로 사용된다.
예를 들어, 멀티 프로세스는 다음과 같은 상황에서 유용하다.
- 서버에서 클라이언트 요청을 처리하는 경우: 서버에서 동시에 여러 개의 클라이언트 요청을 처리해야 하는 경우가 있다. 이때 각 클라이언트 요청마다 별도의 프로세스를 생성하여 처리하면, 여러 개의 요청을 동시에 처리할 수 있다.
- 자식 프로세스에서 동시에 다른 프로그램을 실행해야 하는 경우: 자식 프로세스에서 다른 프로그램을 실행해야 하는 경우가 있다. 이때 각 프로그램마다 별도의 프로세스를 생성하여 실행하면, 다른 프로그램 간에 서로 영향을 미치지 않고 동시에 실행할 수 있다.
- 안전성을 높이고 싶은 경우: 하나의 프로세스에서 다양한 기능을 수행할 경우, 예외 상황이 발생하면 전체 시스템이 영향을 받게 된다. 하지만, 멀티 프로세스를 이용하여 각각의 프로세스가 독립적으로 실행되면, 예외 상황이 발생해도 전체 시스템에 영향을 미치지 않게 된다.
- 다중 코어를 사용하여 성능을 향상시키는 경우: 멀티 프로세스를 이용하면 다중 코어를 활용하여 동시에 여러 개의 프로세스를 실행할 수 있다. 이를 통해 전체 시스템의 성능을 향상시킬 수 있다.
또한, 멀티 프로세스는 프로세스 간 통신 기능을 제공하여, 서로 다른 프로세스 간의 데이터 교환 및 동기화를 가능하게 한다.
⚡멀티프로세스 장/단점
멀티 프로세스의 장단점은 다음과 같다.
장점:
- 안전성: 각각의 프로세스가 독립적으로 실행되므로, 예외 상황이 발생해도 전체 시스템에 영향을 미치지 않는다. 따라서, 안정성이 높은 시스템을 구축할 수 있다.
- 성능 향상: 멀티 프로세스를 이용하면 다중 코어를 활용하여 동시에 여러 개의 프로세스를 실행할 수 있다. 따라서, 전체 시스템의 성능을 향상시킬 수 있다.
- 확장성: 멀티 프로세스는 프로세스 간 통신 기능을 제공하여, 서로 다른 프로세스 간의 데이터 교환 및 동기화를 가능하게 한다. 이를 통해 시스템을 확장할 수 있다.
- 유연성: 각각의 프로세스가 독립적으로 실행되므로, 서로 다른 운영 체제에서도 실행될 수 있다.
단점:
- 오버헤드: 멀티 프로세스를 이용하면 프로세스 간 통신이 필요하므로, 추가적인 오버헤드가 발생한다.
- 자원 소모: 각각의 프로세스는 독립적으로 실행되므로, 각각의 프로세스가 자원을 사용한다. 따라서, 시스템 자원을 효율적으로 사용해야 한다.
- 디버깅: 멀티 프로세스를 디버깅하기 어렵다. 각각의 프로세스가 독립적으로 실행되기 때문에, 여러 개의 프로세스를 디버깅해야 하므로, 복잡성이 증가한다.
- 프로그래밍 복잡도: 멀티 프로세스는 프로그래밍 복잡도가 높다. 각각의 프로세스가 독립적으로 실행되므로, 프로세스 간 통신과 동기화에 대한 고려가 필요하다.
⚡멀티 스레드
멀티 스레드(Multi-thread)는 컴퓨터 프로그래밍에서 여러 개의 스레드(Thread)를 동시에 실행하는 것을 의미한다.
스레드란, 프로그램 내에서 독립적으로 실행 가능한 실행 단위를 말합니다. 멀티 스레드는 여러 개의 스레드가 동시에 실행되므로, 하나의 프로그램 내에서 여러 작업을 동시에 수행할 수 있다.
멀티 스레드를 사용하면, 여러 작업을 동시에 처리할 수 있기 때문에 시스템의 성능을 향상시킬 수 있다. 예를 들어, 웹 서버에서 클라이언트 요청을 처리할 때, 멀티 스레드를 사용하면 여러 개의 요청을 동시에 처리하여 대기 시간을 줄일 수 있다.
하지만 멀티 스레드를 사용할 때는 스레드 간의 경쟁 상태(Race Condition)와 데드락(Deadlock) 등의 문제가 발생할 수 있으므로, 이러한 문제를 예방하고 해결하기 위한 적절한 방법을 사용해야 한다. 또한, 멀티 스레드를 사용하면 CPU의 코어 수보다 많은 스레드를 생성하는 경우, 스레드 간의 경쟁으로 인해 오히려 성능이 저하될 수 있으므로 적절한 스레드 개수를 유지해야 한다.
⚡멀티 스레드의 장/단점
멀티 스레드(Multi-thread)의 장단점은 다음과 같습니다.
장점:
- 높은 성능: 여러 작업을 동시에 처리할 수 있기 때문에 전체적인 시스템의 성능이 향상된다.
- 자원 공유: 여러 스레드가 공유하는 자원을 효율적으로 활용할 수 있다.
- 반응성 향상: 스레드 간의 작업을 분리함으로써 시스템이 더 빠르게 응답할 수 있다.
단점:
- 동기화 문제: 여러 스레드가 동시에 공유 자원에 접근하면서 생기는 문제를 해결하기 위해서는 동기화를 잘 처리해야 한다. 이로 인해 복잡한 코드가 만들어질 수 있다.
- 데드락: 스레드 간의 서로 대기 상태에 빠지면서 진행이 멈추는 데드락이 발생할 수 있습니다.
- 스레드 생성 오버헤드: 스레드를 생성하는 데에는 비용이 들어가므로, 너무 많은 스레드를 생성하면 시스템 성능이 저하될 수 있습니다.
따라서, 멀티 스레드를 사용할 때에는 장단점을 잘 고려하여 적절한 상황에서 사용해야 한다. 또한, 스레드 간의 동기화 문제를 해결하기 위해 적절한 동기화 기술을 사용하고, 스레드의 개수를 적절히 조절하여 최적의 성능을 얻어야 한다.
⚡나의 생각
프로세스와 스레드에 대해서 알고 있고, 개발을 하면서는 스레드에 대해서는 계속해서 들을수 밖에 없었다.
문득 해당 내용에 대해서 기본 개념 및 장/단점을 좀 더 알고 있으면 내가 개발할때 좀 더 도움이 되지 않을까 해서 정리를 하게 되었다.😵
'CS' 카테고리의 다른 글
[Git] git -f 명령어 위험성 공유 (0) | 2022.10.23 |
---|---|
네트워크에 대한 기본 개념 정리 (0) | 2022.10.12 |
HTTPS 개념 및 내용 정리 (0) | 2022.10.08 |
HTTP 대한 개념 및 내용 정리 (0) | 2022.10.04 |
쿠키, 세션, 캐시에 대한 개념 정리 (0) | 2022.10.03 |