스레드란 프로그램 실행의 단위 중 하나로, 프로세스(Process) 내에서 실행되는 실행 흐름 중 하나입니다.
프로세스는 실행 중인 프로그램을 나타내며, 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있습니다.
각각의 쓰레드는 독립적인 실행 흐름을 가지며, 서로 다른 코드를 실행할 수 있습니다.
쓰레드는 다른 쓰레드와 동시에 실행될 수 있으며, 이를 멀티쓰레딩(Multithreading)이라고 합니다.
멀티쓰레딩은 여러 작업을 동시에 처리하는데 효과적입니다.
대표적인 멀티쓰레딩을 구현한 프로그램으로 톰캣과 같은 웹 어플리케이션 서버(WAS)가 있습니다.
스프링 프레임워크의 동작 방식
물론 멀티쓰레딩은 동기화 문제와 같은 문제점도 가지고 있습니다.
여러 쓰레드가 동시에 메모리를 공유하기 때문에, 하나의 쓰레드가 공유 메모리를 수정하는 경우 다른 쓰레드에서 예상치 못한 결과가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 동기화 기법을 사용합니다.
쓰레드의 특징
1) 경량 프로세스
쓰레는 경량 프로세스(Lightweight Process)라고도 불리며, 프로세스보다 더 가벼운 실행 단위입니다. 쓰레드는 프로세스 내에서 쓰레드 간의 데이터 공유와 같은 일부 기능을 공유하며, 프로세스의 자원을 공유하여 더 효율적인 실행을 가능하게 합니다.
2) 동시성
쓰레드는 프로세스 내에서 병렬로 실행될 수 있습니다. 쓰레드는 하나의 프로세스 내에서 동시에 실행되는 다른 쓰레드와 데이터를 공유할 수 있으며, 이를 통해 동시성(concurrency)을 구현할 수 있습니다.
3) 자원 공유
쓰레드는 같은 프로세스 내의 다른 쓰레드와 자원을 공유할 수 있습니다. 이를 통해 쓰레드 간의 효율적인 데이터 공유가 가능해지며, 메모리와 CPU 자원을 보다 효율적으로 사용할 수 있습니다.
4) 컨텍스트 스위칭
쓰레드 간의 전환을 컨텍스트 스위칭(Context Switching)이라고 합니다. 쓰레드 간의 전환은 프로세스 간의 전환보다 더 빠르게 이루어집니다.
쓰레드는 멀티레드 프로그래밍에서 중요한 개념으로, 병렬 처리를 위해 사용됩니다. 하나의 프로세스 내에서 여러 개의 쓰레드를 사용하면, 프로그램의 성능을 개선할 수 있습니다. 하지만 쓰레드 간의 동기화와 같은 문제를 고려하여 안정적인 프로그래밍을 해야 합니다.
그렇다면 웹 페이지를 여러 개 띄우는 것은 멀티쓰레딩일까?
바로 알려드리자면, 이는 멀티쓰레딩이 아닙니다.
대부분의 웹 브라우저는 멀티프로세싱(Multiprocessing) 방식을 이용하여 각 탭이나 창을 별도의 프로세스로 실행합니다. 이렇게 하면 각 웹 페이지가 독립적으로 실행되므로, 하나의 탭이 다운되거나 충돌하더라도 다른 탭은 영향을 받지 않습니다.
멀티프로세싱 방식은 멀티쓰레딩보다 안정성이 높은 장점이 있지만, 프로세스 간 통신이 필요하거나 자원 공유가 필요한 경우에는 멀티쓰레딩을 이용하는 것이 더 효과적입니다.
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 대칭키 vs 비대칭키 vs 단방향 암호화 + PEM (0) | 2023.04.24 |
---|---|
[정보처리기사] 메세지 지향 미들웨어 (0) | 2023.04.24 |
[정보처리기사] 라우팅 프로토콜 (IGP, BGP) (0) | 2023.04.24 |
[Spring] 스프링 프레임워크의 동작 방식 (0) | 2023.04.21 |
[정보처리기사] CSRF 와 XSS 공격의 차이점 (0) | 2023.04.21 |