ν”„λ‘œμ„ΈμŠ€(Process) vs μŠ€λ ˆλ“œ(Thread) λž€?
2025. 1. 19. 16:51
ν”„λ‘œμ„ΈμŠ€(Process)

- cpu에 μ˜ν•΄ λ©”λͺ¨λ¦¬μ— 올렀져 싀행쀑인 ν”„λ‘œκ·Έλž¨ (일련의 λͺ…λ Ήμ–΄λ“€μ˜ μ§‘ν•©)

- μžμ‹ λ§Œμ˜ λ©”λͺ¨λ¦¬ 곡간을 ν¬ν•¨ν•œ 독립적인 μ‹€ν–‰ ν™˜κ²½μ„ κ°€μ§€κ³  μžˆλ‹€.

- μžλ°” JVM은 주둜 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰λ˜λ©° λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œ λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό μ§€μ›ν•œλ‹€.

 

μŠ€λ ˆλ“œ(Thread)

- ν”„λ‘œμ„ΈμŠ€μ˜ μ‹€ν–‰ 뢀뢄을 λ‹΄λ‹Ήν•˜μ—¬ μ‹€μ§ˆμ μœΌλ‘œ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” λ‹¨μœ„

- λͺ…λ Ήμ–΄λ₯Ό λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” ν•˜λ‚˜μ˜ 흐름

- μžλ°”μ—μ„œλŠ” JVM에 μ˜ν•΄ κ΄€λ¦¬λœλ‹€.

- ν”„λ‘œμ„ΈμŠ€λ‹Ή μ΅œμ†Œ ν•˜λ‚˜ μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•œλ‹€.

- 단일 μŠ€λ ˆλ“œ / λ©€ν‹° μŠ€λ ˆλ“œ

- μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ 각각 Stack만 λ”°λ‘œ ν• λ‹Ήλ°›κ³ , Code, Data, Heap μ˜μ—­μ€ 곡유 

 

 

μŠ€λ ˆλ“œ 예제

: 인증 메일 λ°œμ†‘ μš”μ²­ λ©”μ„œλ“œ

public MailAuthInfo sendAuthMail(MemberVO member) {
		
        // 인증 메일에 ν¬ν•¨μ‹œν‚¬ λ‚΄μš© 생성 μ½”λ“œ μƒλž΅...

        
        // 메일 λ°œμ†‘ κ³Όμ •μ—μ„œ 메일 전솑 상황에 따라 μ‹œκ°„ 지연이 λ°œμƒν•  수 μžˆλŠ”λ°
        // 이 κ³Όμ •μ—μ„œ λ‹€μŒ μž‘μ—…μ΄ μ‹€ν–‰λ˜μ§€ λͺ»ν•˜κ³  λ°œμ†‘ μ™„λ£Œ μ‹œμ κΉŒμ§€ λŒ€κΈ°ν•˜κ²Œ λœλ‹€.
        // (ex. μ‚¬μš©μž μž…μž₯μ—μ„œ κ°€μž… μ™„λ£Œ 화면이 ν‘œμ‹œλ˜μ§€ μ•Šκ³  μš”μ²­ 화면이 κ·ΈλŒ€λ‘œ μœ μ§€λ¨)
        // λ”°λΌμ„œ, 메일 λ°œμ†‘ μž‘μ—…κ³Ό λ‚˜λ¨Έμ§€ μž‘μ—…μ„ λ³„λ„λ‘œ λΆ„λ¦¬ν•˜μ—¬ λ™μž‘μ‹œν‚€κΈ° μœ„ν•΄
        // 메일 λ°œμ†‘ λ©”μ„œλ“œ 호좜 μž‘μ—…μ„ ν•˜λ‚˜μ˜ μ“°λ ˆλ“œ(Thread)둜 λ™μž‘μ‹œν‚€λ©΄ λ³„λ„λ‘œ 뢄리가 κ°€λŠ₯ν•˜λ‹€!
        // 즉, 메일 λ°œμ†‘μ΄ μ™„λ£Œλ˜μ§€ μ•Šλ”λΌλ„ λ‹€μŒ μž‘μ—… 진행이 κ°€λŠ₯ν•˜λ‹€!
        new Thread(new Runnable() {

            @Override
            public void run() {
                // λ³„λ„μ˜ μ“°λ ˆλ“œμ—μ„œ μˆ˜ν–‰ν•  μž‘μ—…
                SendMailClient.sendMail(member.getEmail(), subject, content);
                System.out.println("메일 λ°œμ†‘ μ“°λ ˆλ“œ μž‘μ—… μ™„λ£Œ - " + new Date());
            }
        }).start(); // start() λ©”μ„œλ“œ 호좜 ν•„μˆ˜!

        System.out.println("메일 λ°œμ†‘ μ“°λ ˆλ“œ μ‹œμž‘ - " + new Date());
        // ============================================================================
        // MailAuthInfo 객체 생성 ν›„ 인증에 μ‚¬μš©λ  이메일 μ£Όμ†Œμ™€ 인증 μ½”λ“œ μ €μž₯ ν›„ 리턴
        MailAuthInfo mailAuthInfo = new MailAuthInfo(member.getEmail(), auth_code);

        return mailAuthInfo;
}

 

 

κ·Έλž˜μ„œ, ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ μ°¨μ΄λŠ” 뭔데?

ν”„λ‘œμ„ΈμŠ€λŠ” μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…λ‹¨μœ„μ΄λ‹€.

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 되고, κ·Έ μ•ˆμ—μ„œ μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œκ°€ ν• λ‹Ή 받은 μžμ›μ„ μ΄μš©ν•˜μ—¬ μ‹€ν–‰ λ‹¨μœ„λ‘œ μ‘΄μž¬ν•  수 μžˆλ‹€.

즉, μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ—¬λŸ¬ μ‹€ν–‰μ˜ 흐름이라고 μƒκ°ν•˜λ©΄ λœλ‹€.