모든 언어는 CS와 연결되어있다. 한가지를 뚜렷하게 알면 용어는 돌려쓰기 때문에 더 헷갈리지만, 연결되어있다고 생각하면 더 쉽다.
나는 이전 포스팅에서 Thread와 Process에 대해서 디테일 하게 알아보았다. (모른다면 읽어보고 JAVA의 Thread를 따라오자.)
2024.01.03 - [Computer Science/Operation System] - [OS] 프로세스 & 쓰레드(Process & Thread)
다시 말하자면,
Process는 CPU에 의해서 메모리에 올려져있는 Program을 이야기하며, 독립적인 메모리를 가져 독립적인 실행환경을 갖고 있다.
Thread는 Process안에 실행단위를 가지며 stack제외한 부분을 모두 공유한다. Process안에서 한개 이상의 Thread가 존재한다.
# JAVA에서 Thread 환경
JAVA는 하나의 Process에 멀티 Thread를 지원한다. Main() Thread를 기준으로 추가로 Thread를 생성하여 멀티 스레딩환경을 만들 수 있다.
멀티 스레딩을 그렇다면 왜쓸까? 여러가지 이유가 있다.
- 응답성 향상: 여러작업을 동시에 처리할 수 있다.(백그라운드 환경 제공)
- 자원 공유: 여러 Thread에서 같은 자원에 동시에 접근이 가능
이렇게 이야기 하면 어렵긴 하다. 실제 예를 한가지를 들어보자.
웹 서버는 동시에 여러 클라이언트에게 요청을 받는다. 이 경우에 요청을 순차적으로 처리하면 가장 늦게 요청이 온 클라이언트의 응답시간이 매우 늦어질 것이다. 이를 타파하기 위한 기술적으로 멀티 Thread 환경을 생성해주는 것이다. 각 요청별로 Thread를 생성해서 요청을 처리한다.
실제로 업무 환경에서 하나의 어플리케이션 프로그램 즉, 프로세스에서 100명의 사용자가 채팅을 구현한적이 있는데 사용자가 몰리면서 순서가 다르게 채팅이 온 적이 있었다. (애초에 이걸 socket이 아닌 push 방식을 사용한 것이 문제지만....)
아무튼, 이를 해결하기 위해 Queue에 쌓여있는 채팅 메시지를 Thread를 하나 더 만들어서 실행시켰다.
이렇게 응답성 향상을 위해서 사용된다.
# JAVA에서 Thread 환경 만들기
이제는 왜 쓰는지, 이론을 알았고, JAVA 언어 자체의 특성을 알았으니 어떻게 사용하는지를 알아보겠다.
public static void main(String args[]){
Runnable task = new Task();
Thread subTread1 = new Thread(task);
Thread subTread2 = new Thread(task);
subTread1.start();
subTread2.start();
}
public class Task implements Runnable {
@Override
public void run() {
//로직
}
}
위와 같이 활용하면 된다.(스프링에서는 조오오오금 다르게 사용하긴 해야하는데...)
일단, 간단하게 사용방법을 알아보았다.
실무에서는 아직 이해를하고 사용한 적이 없어서... 자세한 설명은 그때 다시 기회가 되면 하기로 하겠다.
'Language > Java' 카테고리의 다른 글
[JAVA] 상속 👨👩👧👦 (2) | 2023.09.12 |
---|---|
[JAVA] JVM 메모리 구조 (0) | 2023.09.12 |
[JAVA] Collection FrameWork (0) | 2022.01.12 |
[JAVA] 제네릭(Generic) (0) | 2022.01.10 |
[JAVA] Arrays 클래스 (0) | 2022.01.10 |