-
Notifications
You must be signed in to change notification settings - Fork 0
김민주 6주차 JSP CAFE 학습 일지
Kim Minju edited this page Aug 11, 2024
·
1 revision
스레드는 user 스레드와 daemon 스레드 2가지 종류로 구분할 수 있다.
- 비즈니스 로직을 수행하는 스레드
- 끝날때까지 실행? (중간에 종료되지 않는다는 뜻인지?)
- main 스레드니깐, 모든 스레드가 종료되면 JVM도 종료됨
- 스레드 풀이 있으면, 어떻게 되는지?
- 모든 사용자 스레드가 종료될 때까지 실행을 계속하게 됨
nohup도 결국 systemd or init 하위로 동작시키게 하는 개념인데 데몬 프로세스랑 어떤 차이가 있을까?
-
docker-compose up -d로 실행하면 systemd or init의 자식 프로세스로 만듦
-
nohup으로 만들면 특이하게 SIGHUP 신호를 무시시키는 프로세스를 현재 쉘 자식으로 만듦
- 쉘을 종료시키더라도 SIGHUP신호를 무시하기 때문에 고아 프로세스가 되고, 이는 init or systemd 를 부모로 가지게 됨
-
공통점은 둘 다 결국 init or systemd의 자식 프로세스가 된다는 것
여기서 좀비 프로세스와 고아 프로세스의 차이는 구체적으로 어떤게 있을까?
- 고아는 부모가 종료된 거
- 따라서 init 또는 systemd에서 관리
- 좀비는 본인이 종료됐는데, 부모가 종료됐다고 수집하지 않은 상태
- wait()이나 waitpid()로 종료 상태를 수집해야함
- 백그라운드에서 보조적인 작업이라는데 어떤 예시가 잇을까?
- 얘는 user가 종료되면 같이 종료돼버리면서 JVM도 종료됨
Thread를 만들 떄 Runnable로 작업을 정의해서 넣는데, 이건
작업과 스레드를 분리하는 것
Thread에 runnable을 외부에서 주입하여 수행하는 것
Runnable을 써야하는 이유는
- Thread는 다중 상속이 안 되고
- Thread는 유연하지 않음 (작업이 내부에 정의되어있음)