프로그램 개발/미분류

[코딩 인터뷰]지식 기반 문제 - 스레드와 락 문제

(ㅇㅅㅎ) 2023. 1. 13. 14:51
728x90
반응형

 

 

[ 프로세스 vs 스레드 ]

프로세스와 스레드의 차이는 무엇인가?

프로세스

  • CPU 시간이나 메모리 등의 시스템 자원이 할당되는 독립적인 개체
  • 각 프로세스는 별도의 주소 공간에서 실행
  • 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가능
    → 접근하려면 파이프, 파일, 소켓 등을 이용해야 됨

스레드

  • 프로세스 안에 존재하며 프로세스의 자원을 공유
  • 별도의 레지스터와 스택을 갖지만 힙 메모리는 서로 읽고 쓸 수 있음
  • 프로세스의 특정한 수행 경로와 같음
    → 한 스레드가 프로세스 자원 변경 시 다른 스레드도 변경 결과 확인 가능

 

 

[ 문맥 전환 ]

문맥 전환에 소요되는 시간을 측정하려면 어떻게 해야 할까?

 두 프로세스의 타임스탬프의 차이와 같습니다. 타임스탬프의 경우 마지막과 첫 번째 명령어의 시간을 기록해야 합니다.

⭐ 문맥 전환 : 두 프로세스를 전환하는 데 드는 시간

 

 

[ 동기화된 메서드 ]

동기화된 메서드 A와 일반 메서드 B가 구현된 클래스가 있다. 같은 프로그램에서 실행되는 스레드가 두 개 존재할 때
1. A를 동시에 실행할 수 있는가?
2. A와 B는 동시에 실행될 수 있는가?

1. 두 스레드가 같은 객체를 갖고 있다면 동시 실행 '불가능'하고 다른 객체면 동시 실행 '가능'합니다.

2. B가 synchronized로 선언되지 않았으므로 thread2가 B를 실행하는 동안 thread1이 A를 실행할 수 있습니다.

⭐ 객체별로 실행 가능한 synchronized 메서드는 하나뿐입니다. 다른 스레드는 해당 객체의 비-synchronized 메서드 혹은 다른 객체의 메서드는 실행할 수 있습니다.

반응형