womyo / Interview_Questions

0 stars 0 forks source link

[필수] 프로세스와 스레드의 차이점에 대해 설명해주세요. #7

Open womyo opened 1 week ago

womyo commented 1 week ago

꼬리질문

womyo commented 5 days ago
프로세스와 스레드는 컴퓨터 시스템에서 실행되는 작업의 기본 단위 프로세스 (Process) 스레드 (Thread)
운영 체제에서 실행 중인 프로그램의 인스턴스 프로세스 내에서 실행되는 작은 실행 단위
독립적인 메모리 공간을 가짐. 다른 프로세스의 데이터에 직접 접근할 수 없음 한 프로세스 내에서 여러 스레드가 공유하는 메모리 공간이 있어 스레드 간 데이터 공유 가능
다른 프로세스와 통신하려면 IPC(Inter-Process Communication)와 같은 별도의 메커니즘 필요 같은 프로세스 내 스레드 간 통신은 간단히 이루어짐
독립된 실행 환경 제공으로 안정성이 높음 자원을 공유하기 때문에 동기화와 충돌 방지에 주의 필요
프로세스 간 전환(컨텍스트 스위칭) 시 높은 오버헤드 발생 스레드 간 전환 시 낮은 오버헤드 발생

멀티스레딩이 필요한 이유는 무엇인가요?

멀티스레딩 과정에서 Race Condition을 방지하는 방법은 무엇인가요?

iOS 앱에서 멀티스레딩을 구현하는 방법은 무엇인가요?

  1. Grand Central Dispatch(GCD)
    • 효율적인 스레드 풀 관리와 태스크 스케줄링을 지원. 작업을 큐에 넣어 비동기적으로 실행할 수 있게함
    • Main Queue: UI 업데이트와 같은 메인 스레드에서 실행해야 하는 작업을 처리
    • Global Queue: 백그라운드 작업이나 비동기 작업에 사용
  2. OperationQueue
    • 고수준의 API로서 복잡한 멀티스레딩 작업을 보다 쉽게 관리
    • 작업의 우선순위와 의존성을 설정할 수 있음
seokyung402 commented 3 days ago

프로세스와 스레드의 차이점에 대해 설명해주세요.

꼬리질문

jjwon2149 commented 3 days ago

프로세스와 스레드의 차이점에 대해 설명해주세요.

프로세스는 프로그램이 실행될때 생성되는 독립적인 실행 단위. 스레드는 프로세스 내에서 실행되는 작업의 실행 단위.

멀티스레딩이 필요한 이유는 무엇인가요?

하나의 프로세스 내에서 여러 작업을 동시에 수행하기 위해

멀티스레딩 과정에서 Race Condition을 방지하는 방법은 무엇인가요?

공유 리소스 스레드를 안전하게 만들거나 두 개의 스레드가 동시에 리소스를 업데이트하지 않도록 한다.

iOS 앱에서 멀티스레딩을 구현하는 방법은 무엇인가요?

  1. 스레드를 수동으로 생성 및 관리
  2. GCD 사용
  3. 작업 및 대기열(NSOperation or NSOperationQueue) 사용
yehjinjang commented 3 days ago

1) 프로세스와 스레드의 차이점에 대해 설명해주세요.

프로세스는 독립적인 프로그램 실행 단위 스레드는 프로세스 내부 작업 단위

2) 멀티스레딩이 필요한 이유는 무엇인가요?

멀티 스레딩은 앱의 성능을 높이고 동시에 여러 작업을 처리 가능하게 하기에 필요해요

3) 멀티스레딩 과정에서 Race Condition을 방지하는 방법은 무엇인가요?

동기화 , Serial Queue등을 사용해 방지할 수 있음

4) iOS 앱에서 멀티스레딩을 구현하는 방법은 무엇인가요?

iOS에서 GCD와 OperationQueue를 주로 사용해 멀티 스레딩 구현

sven-kor commented 3 days ago
  1. 프로세스와 스레드 차이

프로세스: 독립적인 실행 단위, 자체 메모리 공간 스레드: 프로세스 내의 실행 흐름, 메모리 공유

  1. 멀티스레딩이 필요한 이유

UI 응답성 향상 긴 작업 처리 (네트워크, 파일 IO) CPU 자원 효율적 사용 동시성 처리

  1. Race Condition 방지
// Serial Queue 사용
let serialQueue = DispatchQueue(label: "com.app.serial")
serialQueue.sync {
    // 안전한 데이터 접근
}

// Lock 사용
let lock = NSLock()
lock.lock()
// 작업
lock.unlock()
  1. iOS 멀티스레딩구현
madcow95 commented 3 days ago

프로세스와 스레드의 차이점에 대해 설명해주세요.

프로세스

실행 중인 프로그램의 인스턴스

구성요소

  1. 코드 영역 (텍스트 섹션)
  2. 데이터 영역 (전역 변수/정적 변수)
  3. 힙 영역 (동적 할당 메모리)
  4. 스택 영역 (지역 변수, 함수 호출 정보)

    특징

  5. 독립된 메모리 공간
  6. 각각의 프로세스는 별도의 주소 공간 할당
  7. 다른 프로세스와 완전히 독립적

    장단점:

  8. 장점: 안정성이 높음, 한 프로세스가 죽어도 다른 프로세스에 영향 없음
  9. 단점: 생성 비용이 큼, 컨텍스트 스위칭 비용이 큼

    스레드

    프로세스 내에서 실행되는 작업의 단위

    구성요소

  10. 스레드 ID
  11. 프로그램 카운터
  12. 레지스터 셋
  13. 스택

    특징

  14. 프로세스의 자원을 공유
  15. 같은 프로세스 내의 다른 스레드와 메모리 공유
  16. 독립적인 스택만 가짐
  17. 가볍고 생성 비용이 적음

    장단점:

  18. 장점: 생성 비용이 적음, 컨텍스트 스위칭이 빠름
  19. 단점: 동기화 이슈 발생 가능, 한 스레드의 문제가 전체 프로세스에 영향

    멀티스레딩이 필요한 이유는 무엇인가요?

    멀티스레딩: 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것

  20. CPU 자원을 효율적으로 활용할 수 있습니다. 한 스레드가 대기 상태일 때 다른 스레드가 실행될 수 있어 전체적인 프로그램 실행 속도가 향상됨
  21. 사용자 인터페이스를 처리하는 메인 스레드는 계속 반응할 수 있고, 시간이 오래 걸리는 작업은 별도의 스레드에서 처리하여 응답성을 향상할 수 있음
  22. 웹 서버에서 여러 클라이언트의 요청을 동시에 처리하는 등의 독립적인 작업들을 동시에 처리할 수 있음

    스레드 간 동기화 문제, 데드락이나 레이스 컨디션과 같은 동시성 문제, 너무 많은 스레드를 생성시 성능 저하될 수 있음

    멀티스레딩 과정에서 Race Condition을 방지하는 방법은 무엇인가요?

  23. GCD (Grand Central Dispatch) 사용
  24. Barrier Flag 사용
  25. NSLock 사용
  26. synchronized 블록 사용
  27. Atomic Properties 사용
  28. OperationQueue 사용
  29. Actor 사용 (iOS 13 이상)

    고려사항

  30. 성능 최적화
    • 적절한 동기화 메커니즘 선택
    • 불필요한 동기화 피하기
    • 동기화 범위를 최소화
  31. 데드락 방지
    • 동기화 순서 일관성 유지
    • 중첩된 락 사용 주의
  32. 메인 스레드 고려
  33. UI 업데이트는 반드시 메인 스레드에서 수행

    iOS 앱에서 멀티스레딩을 구현하는 방법은 무엇인가요?

  34. 가장 일반적인 방법 - GCD(Grand Central Dispatch)
    // 비동기 실행
    DispatchQueue.global().async {
    // 백그라운드 작업
    DispatchQueue.main.async {
    // UI 업데이트
    }
    }
  35. async/await (iOS 13 이상)
    
    func fetchData() async throws -> Data {
    let (data, _) = try await URLSession.shared.data(from: URL(string: "testURL"))
return data

}

Task { let data = try await fetchData()

}

3. Operation과 OperationQueue - 복잡한 작업에 적합
```Swift
let operationQueue = OperationQueue()
let operation = BlockOperation {
    // 작업 내용
}
operationQueue.addOperation(operation)
kyuSangHwang commented 3 days ago

프로세스와 스레드의 차이점에 대해 설명해주세요.

프로세스(Process)

스레드(Thread)

프로세스와 스레드의 차이점

  1. 메모리 공간: 프로세스는 독립적인 메모리 영역을 가지며, 다른 프로세스와 격리되어 실행되지만, 스레드는 같은 프로세스 내에서 메모리를 공유.
  2. 자원 할당: 프로세스는 운영체제로부터 직접 시스템 자원을 할당받지만, 스레드는 자신이 속한 프로세스의 자원을 공유.
  3. 통신 방식: 프로세스 간 통신(IPC)은 복잡한 메커니즘이 필요하지만, 스레드 간 통신은 공유 메모리를 통해 상대적으로 간단.
  4. 안정성: 한 프로세스가 비정상 종료되어도 다른 프로세스에 영향을 주지 않음. 하지만 한 스레드에서 문제가 발생하면 같은 프로세스 내의 다른 스레드에도 영향을 줄 수 있음.

멀티스레딩이 필요한 이유는 무엇인가요?

  1. 자원 효율성: 멀티스레딩은 프로세스보다 적은 메모리와 시스템 자원을 사용하면서도 동시에 여러 작업을 수행할 수 있음.
  2. 응답성 향상: 사용자 인터페이스 응답성을 높이면서 동시에 백그라운드 작업을 수행할 수 있음.
  3. 성능 개선: 멀티코어 프로세서를 효과적으로 활용하여 전체적인 애플리케이션 성능을 향상시킬 수 있음.
  4. 코드 구조화: 복잡한 작업을 논리적으로 분리된 스레드로 나누어 코드를 더 구조화할 수 있음.

멀티스레딩 과정에서 Race Condition을 방지하는 방법은 무엇인가요?

Race Condition은 여러 스레드가 공유 자원에 동시에 접근할 때 발생할 수 있는 문제. 이를 방지하기 위한 방법들은 다음과 같습니다:

  1. 동기화(Synchronization)synchronized 키워드나 락(lock)을 사용하여 공유 자원에 대한 접근을 제어.
  2. 세마포어(Semaphore): 공유 자원에 접근할 수 있는 스레드의 수를 제한.
  3. 뮤텍스(Mutex): 상호 배제를 보장하여 한 번에 하나의 스레드만 공유 자원에 접근할 수 있도록 함.
  4. 원자적 연산(Atomic Operations): 분할할 수 없는 단일 연산으로 처리하여 Race Condition을 방지.
  5. 락-프리 알고리즘: 락을 사용하지 않고도 동시성을 보장하는 알고리즘을 사용.

iOS 앱에서 멀티스레딩을 구현하는 방법은 무엇인가요?

  1. Grand Central Dispatch (GCD): Apple의 저수준 API로, 작업을 큐에 제출하여 동시성을 관리.

    DispatchQueue.global().async {
        // 백그라운드 작업 수행
        DispatchQueue.main.async {
            // UI 업데이트
        }
    }
  2. Operation과 OperationQueue: 더 높은 수준의 추상화를 제공하며, 작업 간의 의존성을 쉽게 관리할 수 있음.

    let operation = BlockOperation {
        // 작업 수행
    }
    OperationQueue.main.addOperation(operation)
  3. NSThread: 저수준의 스레드 관리를 위한 클래스입니다. 하지만 GCD나 Operation을 사용하는 것이 더 권장.

  4. Async/Await: Swift 5.5부터 도입된 구조화된 동시성 모델로, 비동기 코드를 동기 코드처럼 작성할 수 있게 해줌.