πŸ€“ μŠ€λ ˆλ“œ

유영·2023λ…„ 8μ›” 13일

πŸ“‚ κ°œλ… 정리

πŸ“Œ ν”„λ‘œκ·Έλž¨ (Program)

ν”„λ‘œκ·Έλž¨μ΄λž€ λͺ…령어와 λ°μ΄ν„°μ˜ λͺ¨μŒμž…λ‹ˆλ‹€.

  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„± 되고, 컴퓨터에 μ˜ν•΄ μ‹€ν–‰ λ©λ‹ˆλ‹€.
  • 파일 μ‹œμŠ€ν…œμ— μ €μž₯되며 싀행될 λ•Œ λ©”λͺ¨λ¦¬μ— λ‘œλ“œ λ©λ‹ˆλ‹€.

πŸ“Œ ν”„λ‘œμ„ΈμŠ€ (Process)

ν”„λ‘œμ„ΈμŠ€λž€ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

  • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ή λ°›μ•„ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨ μž…λ‹ˆλ‹€.
  • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μœΌλ©°, μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“Œ μŠ€λ ˆλ“œ (Thread)

μŠ€λ ˆλ“œλž€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μˆ˜ν–‰λ˜λŠ” μž‘μ—… λ‹¨μœ„μž…λ‹ˆλ‹€.

  • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λŠ” ν•œ 개 μ΄μƒμ˜ μŠ€λ ˆλ“œ(μž‘μ—…)을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • 같은 ν”„λ‘œμ„ΈμŠ€μ˜ μŠ€λ ˆλ“œλ“€μ€ λ©”λͺ¨λ¦¬μ™€ μžμ›μ„ κ³΅μœ ν•˜λ©° λ³‘λ ¬μ μœΌλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

πŸ“‚ μž₯단점

πŸ˜„ μž₯점

  • 병렬 처리: μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜κ±°λ‚˜ λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 닀쀑코어 CPUλ₯Ό ν™œμš©ν•˜μ—¬ μž‘μ—…μ„ λΆ„μ‚°μ‹œμΌœ 전체적인 처리 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μžμ› 곡유: 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œμ˜ λ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°λ‚˜ μžμ›μ— λŒ€ν•œ κ³΅μœ κ°€ νš¨μœ¨μ μž…λ‹ˆλ‹€.
  • μž‘μ—… λΆ„λ‹΄: λ³΅μž‘ν•˜κ±°λ‚˜ 큰 μž‘μ—…μ„ μž‘μ€ μž‘μ—…μœΌλ‘œ λΆ„ν• ν•˜μ—¬ 병렬적인 처리λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹œκ°„ μ§€μ—° μ΅œμ†Œν™”: 일뢀 μŠ€λ ˆλ“œμ˜ μ²˜λ¦¬κ°€ μ§€μ—°λ˜λ”λΌλ„ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ λ³‘λ ¬λ‘œ λ‹€λ₯Έ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ˜“ 단점

  • 동기화: μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 곡유 μžμ›μ— λ™μ‹œμ— μ ‘κ·Όν•  λ•Œ λ°μ΄ν„°μ˜ 일관성을 μœ„ν•˜μ—¬ 동기화 λ©”μ»€λ‹ˆμ¦˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€.
  • ꡐ착 μƒνƒœ(Deadlock): μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ μ„œλ‘œκ°€ μ μœ ν•˜κ³  μžˆλŠ” μžμ›μ„ λŒ€κΈ°ν•˜λŠ” μƒνƒœλ‘œ μž‘μ—… μˆ˜ν–‰μ΄ μ§„ν–‰λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“‚ μ‹€μŠ΅

βš™οΈ Thread 상속

public class MyThread extends Thread {

    public void run() {
    	// TO DO :: μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ν•  μž‘μ—… κ΅¬ν˜„
       	System.out.println("Running Thread...");
    }
    
    public static void main(String[] args) {
        MyThread myThread = new MyThread();  // μŠ€λ ˆλ“œ 생성
        myThread.start();  // μŠ€λ ˆλ“œ μ‹€ν–‰
    }
}

βš™οΈ Runnable μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

public class MyRunnable implements Runnable {
    public void run() {
    	// TO DO :: μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ν•  μž‘μ—… κ΅¬ν˜„
       	System.out.println("Running Thread...");
    }
    
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread myThread = new Thread(myRunnable);  // μŠ€λ ˆλ“œ 생성
        myThread.start();  // μŠ€λ ˆλ“œ μ‹€ν–‰
    }
}

πŸ€” κ³ μ°°

μŠ€λ ˆλ“œκ°€ 병렬 μ²˜λ¦¬λΌλŠ” μž₯점이 μžˆλ‹€κ³  해도, 단일코어 CPU μ‚¬μš© μ‹œ ν•œ λ²ˆμ— μŠ€λ ˆλ“œ ν•˜λ‚˜λ§Œμ„ μ²˜λ¦¬ν•  수 μžˆμ–΄ μž₯점이 ν‡΄ν™”λ˜λŠ”κ°€?

단일 μ½”μ–΄ CPUμ—μ„œλŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œμ„ μ²˜λ¦¬ν•  수 있기 λ•Œλ¬Έμ— 병렬 처리의 이점이 μ œν•œλ  수 μžˆμŠ΅λ‹ˆλ‹€.
κ·ΈλŒ€μ‹  μŠ€λ ˆλ“œ κ°„μ˜ μŠ€μœ„μΉ­μ„ 톡해 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ²ˆκ°ˆμ•„κ°€λ©° μ‹€ν–‰λ˜λŠ” λ©€ν‹°μŠ€λ ˆλ”© 기법을 μ‚¬μš©ν•˜μ—¬ 병렬 처리λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단일 μŠ€λ ˆλ“œμ˜ 경우 ν”„λ‘œμ„ΈμŠ€μ™€ λ‹€λ₯Έ 점이 무엇인가?

κ°œλ… μžμ²΄κ°€ λ‹€λ₯΄λ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ λœ»ν•˜κ³ , 단일 μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œ λ§Œμ„ μ‚¬μš©ν•˜μ—¬ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것을 λœ»ν•©λ‹ˆλ‹€.

profile
不ζ₯下問 =͟͟͞͞➳β₯

1개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 8μ›” 13일

이런 μœ μš©ν•œ 정보λ₯Ό λ‚˜λˆ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λ‹΅κΈ€ 달기