쓰레드는 프로세스 내부에 존재며 프로세스의 Stack 영역에 해당한다.
1. 메모리 (Memory)
쓰레드는 프로세스 내에서 동일한 메모리 공간을 공유합니다. 이로 인해 데이터 공유 및 효율적인 통신이 가능합니다.
2. 병렬성 (Concurrency)
쓰레드는 동시에 실행될 수 있으므로 다중 쓰레드 프로그래밍을 통해 병렬 처리를 구현할 수 있습니다. 이를 통해 시스템의 성능을 향상시킬 수 있습니다.
3. 작업 분할 (Task Division)
여러 쓰레드를 사용하면 작업을 분할하고 병렬로 처리할 수 있습니다. 이를 통해 복잡한 작업을 각각의 쓰레드에 할당하여 빠르게 실행할 수 있습니다.
4. Context Switching
다중 쓰레드 프로그램에서는 쓰레드 간의 전환이 발생할 때 Context Switching이 필요합니다. 이것은 CPU가 현재 실행 중인 쓰레드를 저장하고 다른 쓰레드로 전환하는 작업을 의미합니다.
쓰레드간의 Context Switching은 프로세스의 공유 메모리를 사용하므로 비교적 적은 범위, 공간, 속도로 동작합니다. 프로세스의 경우에는 IPC를 이용해서 데이터를 공유해야 하므로 추가적으로 동기화 문제도 생깁니다.
IPC 란 단순히 내부 프로세스 간의 통신을 의미하며 localhost를 통한 통신을 포함해 메세지큐를 이용하거나 일반적인 통신을 의미한다.(단, 내부 프로세스끼리의 통신을 IPC(Inter Proccess Communication)라고 함)
5. 동기화 (Synchronization)
다중 쓰레드 환경에서는 데이터 일관성을 유지하기 위해 동기화 메커니즘이 필요합니다. 동기화를 통해 여러 쓰레드 간의 접근을 제어하고 경쟁 조건을 방지할 수 있습니다.
6. 더 적은 자원 소모 (Lower Resource Overhead)
쓰레드는 프로세스와 비교하여 자원 소모가 적습니다. 프로세스는 독립된 메모리 공간을 가지고 있지만, 쓰레드는 프로세스의 메모리를 공유하므로 자원 소모가 줄어듭니다.
7. 빠른 생성 및 제거 (Faster Creation and Termination)
쓰레드는 프로세스에 비해 빠르게 생성하고 제거할 수 있습니다. 이로 인해 작업을 동적으로 할당하거나 해제할 때 효율적입니다.
'CS' 카테고리의 다른 글
동기 비동기, 블록킹 논블록킹 (0) | 2024.01.19 |
---|---|
GSLB와 CDN (0) | 2024.01.17 |
ORM, JPA, Spring Data JPA 란 (0) | 2022.06.09 |
DB Index (0) | 2022.05.27 |
REST API (0) | 2022.05.22 |