Thread 가시성이란 ? Thread 가시성이란 Thread의 시야 범위를 뜻한다. 공유하는 변수에 연산이 일어날 때 CPU를 점유하고 동작하는데 이 때 main memory에만 존재하는 것이 아니라 CPU cache에도 공유하는 자원에 대한 데이터가 들어있다. 이 때 CPU cache를 읽어오는데 언제 main memory에 옮겨갈 지 모르기 때문에 여러 thread가 동시에 읽음 연산과 쓰기 연산을 한다면 main memory에서 cache로 데이터를 옮기는 과정에서 다른 thread가 연산을 진행하여 결국 데이터 불일치 문제가 생기는 것이다. 이런 불일치 문제를 Thread 가시성 이슈라고 하며 자바에서는 volatile 키워드를 통해 해결할 수 있다. volatile은 캐시가 아닌 main me..
최근 회사에서 작업을 하면서 문제가 생긴 이력이 있다. 발생한 이슈는 50000개 이상의 데이터를 고객에게 전달해줘야하는 배치 프로그램에서 약 400 ~ 500개의 데이터가 손실된 것이었다. 재빨리 문제를 파악하기 시작하였고 원인은 다음과 같았다. 현재 ArrayList는 heap 영역에 올라가 있어 Thread간에 자원을 공유하고 있는 상황이다. 자원을 공유하기 때문에 함수를 실행하는 과정에서 race condition이 발생하였고 데이터가 덮어씌워졌다. 이 문제를 해결하기위해 우리는 발생의 근원이 되는 Concurrency(동시성)과 Parallel(병렬성)에 대해 알아보고 문제를 해결하기 위한 전략까지 살펴볼 것이다. Concurrency 동시성은 한마디로 설명하면 동시에 실행되는 것 처럼 보여지는..
컴퓨터는 하나의 프로그램을 실행하여 사용자들로 하여금 서비스를 이용할 수 있게 하는데 이를 Process 라고 한다. 이 프로세스는 안에 작업을 하는 주체가 따로 존재하는데 우리는 이를 Thread라고 부른다. Thread를 알기 위해서는 프로세스에 대해 알아야할 필요가 있다. 프로세스를 시작으로 멀티스레드 동시성 까지 천천히 알아가보도록 하자 Process Process는 CPU 자원을 할당 받아 프로그램을 실행시킨다. Process안에는 프로그램을 실행시키기 위한 여러 주체가 존재하는데 안을 간단하게 살펴보자. 1. PCB 프로세스 제어 블록이라 불리는 PCB는 프로세스 고유 식별자(PID)와 레지스터 프로세스 상태등을 저장하고 있다. 프로세스가 생성과 동시에 고유한 PCB가 생성되고 OS는 PCB를..
- Total
- Today
- Yesterday
- 취업
- Kotlin
- 취준
- 자바
- 취업준비
- 개발자
- swarm
- CS
- 코드
- Spring
- 면접준비
- JPA
- 백엔드
- 동시성
- 면접 준비
- thread
- DB
- DevOps
- MySQL
- docker
- java
- 인터뷰
- IT
- 코딩
- 프로젝트
- Redis
- 면접
- 프로그래밍
- 게시판
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |