thread(2)
-
스레드
프로세스는 자원과 제어로 구분할 수 있다. 이 중 제어만 분리한 실행 단위를 스레드라고 한다. 한 프로세스는 하나 이상의 스레드를 가지고 있다. 스레드는 프로세스의 직접 실행 정보를 제외하고 나머지 관리 정보를 공유한다. 아래 이미지와 같이 스레스 실행 정보 블록(TCB)을 독립적으로 가지며, 프로세스의 전역데이터와 힙, 코드 등을 다른 스레드와 공유한다. 스레드는 보통 다른 프로시저를 호출하고, 다른 실행 기록을 기록하는데, 프로시저 : 업무를 실행하기 위한 절차 스레드 중 프로세스의 속성 중 일부가 들어 있는 것을 경량 프로세스, 반대로 스레드 하나에 프로세스가 하나인 경우를 중량 프로세스라고 한다. 프로세스 하나에 포함된 스레드들은 공동의 목적을 달성하려고 병렬로 수행한다. 즉, 프로세스가 하나인 ..
2023.11.11 -
11장 : 동시성
아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 - synchronizaed 는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장 - 상태가 일관되지 않은 순간의 객체가 다른 스레드가 보지 못하게 막는 용도로만 생각 - 동기화는 배타적 실행 뿐 아니라 스레드 사이의 안정적인 통신에 꼭 필요 - volatile 선언하면 동기화를 생략해도 됨 - 배타적 수행과는 상관 없지만 항상 가장 최근에 기록된 값을 보장 - 메서드에 synchronized를 붙였으면 volatile 제거해야 - Atomic 패키지는 락 없이도 스레드 안전한 프로그래밍을 지원 - Atomic 은 원자성(배타적 실행)까지 지원 - 가장 좋은 방법은 애초에 가변 데이터를 공유하지 않는 것 - 가변데이터는 단일 스레드에서만 사..
2023.04.22