동시성

·java/summary
프로그래밍을 하다 보면 고려 사항 중 하나가 동시성이다. 동시성이 왜 발생하는지에 관한 고민의 흐름을 정리하고자 글로 작성하고자 한다. 1. 자바 코드는 어떻게 실행될까?자바 코드는 어떻게 실행될까? 자바는 기본적으로 컴파일 언어이다. 컴파일 언어란 코드가 실행되기 이전에 컴파일러(compiler) 를 거쳐 소스 코드를 기계어로 번역하는 과정을 거치는 언어를 말한다. 자바는 자바 컴파일러를 통해서 소스 파일을 자바 바이트 코드로 변환한다. 변환된 바이트 코드는 런타임 환경에서 JVM(Java Virtual Machine) 을 통해 OS 가 읽을 수 있는 기계어(binary code) 로 변환하고, 변환된 기계어는 OS 가 읽어 명령을 수행하게 된다.  2. 동시성이 발생 지점인 공유 자원은 어느 영역일까..
[1] 동시성 이슈가 발생하는 원인(1) CPU 기계어 명령은 기본적으로 원자적 연산을 지원하지 않는다.프로그램은 프로그램 코드를 CPU 기계어 명령어로 변환하여 연산하는데, 이 때 CPU 기계어 명령은 기본적으로 원자적 연산을 지원하지 않는다.두 명령어 이상을 처리하는 경우 원자성을 보장하지 않으며 즉, 현재 수행 중인 명령어가 모두 실행되지 않은 상태로 인터럽트 될 수 있다.결론적으로 CPU 에서 원자성을 보장하지 않는 모든 연산 처리는 스레드 간 동시 접근에 의해 데이터 불일치가 발생할 수 있다.자바에서의 해결 방안 : Atomic 연산 객체  (2) CPU 처리 데이터는 실시간으로 메인 메모리에 데이터가 저장되지 않는다.가시성(visibility) 은 멀티 스레드 환경에서 공유 변수의 변경 내용이..
cooper25
'동시성' 태그의 글 목록