캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다. CPU가 메인메모리에 접근하기 전에 캐시 메모리에서 원하는 데이터 존재 여부를 확인하는데,이때 필요한 데이터가 있는 경우 Hit(적중), 없는 경우 Miss(실패)
병렬 처리에서 탁월한 성능을 가질 수 있다.(작업의 처리 속도가 증가한다.)여러가지 스레드를 사용할 수 있다.cpu내 물리적 연산부가 코어고 코어의 효율을 향상시키기위해 각 코어당 분산처리할 수 있는 기술(=하이퍼스레딩)이 나왔습니다. 엄밀히 따지면 하나의 코어가 여러
데이터베이스의 상태를 변환시키는 하나의 논리적인 작업 단위를 구성하는 연산들의 집합이다.작업의 완전성을 보장해준다.즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다.하나의 트랜잭션은
Top-Down 방식으로 접근하며 순차적인 처리가 중요시 되어 프로그램 전체적으로 연결되도록 만드는 프로그래밍 기법장점코드의 가독성이 좋다실행속도가 빠르다단점유지보수 및 디버깅이 어려움Bottom-Up 방식으로 접근하며, 데이터와 절차를 하나의 덩어리(Object)로
데이터 영역 프로그램이 구동되는 동안 항상 접근 가능한 변수가 저장된다 전역(Global) 변수 / 정적(Static) 변수 Read-Write 스택(Stack) 영역 값 형식을 저장하는 영역 지역변수와 매개변수가 저장되는 영역 코드 블록 안에서 생성된 변수들은 블록
❓프로세스(Process)란? 프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립적인 메모리 공간을 갖고 있으며 운영체제에서 별도의 작업 단위로 분리해서 관리된다. 각 프로세스는 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다. 그리고 프로세
스레드 생성과 실행 방식 자바에서 스레드를 생성하는 방법은 두 가지가 있다. Thread 클래스를 상속하는 방식 Runnable 인터페이스를 구현하는 방식 Thread 클래스 상속 자바는 예외도 스레드도 객체로 다룬다. 직접 스레드를 만들기 위해 Thread 클래스
스레드는 생성되고 실행되며 종료되는 일련의 생명주기를 갖는다. 자바에서는 Thread.State 열거형으로 상태를 구분한다.NEW -> RUNNABLE: start() 호출RUNNABLE -> TIMED_WAITING: sleep(), join(timeout) 등 호출
sleep 일정 시간 동안 현재 스레드를 멈춘다. TIME_WAITING 상태로 진입한다. Thread.sleep()을 사용하면 InterruptedException 체크 예외가 발생한다. join WAITING 상태로 진입한다. 스레드가 다른 스에드의 특정 작업
특정 스레드의 작업을 중간에 중단하려면 어떻게 해야할까? 특정 스레드의 작업을 중단하는 가장 쉬운 방법은 변수를 사용하는 것이다. 여기서는 runFlag 를 사용해서 work 스레드에 작업 중단을 지시할 수 있다. 작업 하나에 3초가 걸린다고 가정하고 Thread.s
자바에서의 가시성(Visibility) 문제란? 멀티스레드 프로그래밍에서 가장 자주 마주치는 문제 중 하나가 바로 "가시성 문제"이다. 이는 하나의 스레드에서 변경한 변수 값이 다른 스레드에게 보이지 않는 현상을 의미한다. 자바는 성능 최적화를 위해 각 스레드가 메모리
면접에서 "정규화와 비정규화가 뭔지 설명해보세요"라는 질문을 받았는데 순간 머릿속이 새하얘졌다. 머리 어딘가엔 들어본 기억이 있고 공부한 적도 분명 있는데 지금 당장 설명하려고 하니까 말이 안 나왔다. 그 짧은 순간이 지나고 나서야 “아, 이건 단순히 용어를 외우는 문
디자인 패턴은 자주 발생하는 문제를 해결하기 위한 객체지향적인 설계의 정형화된 해결책이다. 개발 과정에서 반복적으로 마주치는 문제들을 효과적으로 해결할 수 있는 재사용 가능한 설계 템플릿이며 GoF(Gang of Four)라는 네 명의 소프트웨어 공학자가 23가지의 패
구조(Structural) 디자인 패턴 구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 설계하는 데 집중하는 패턴이다. 즉, 여러 객체를 어떻게 연결하고 어떻게 유연하게 확장하거나 대체할 수 있을지 고민한 결과물이다. 대표적인 구조 패턴에는 아래 7가지가 있다.
행위 패턴은 객체 간의 책임 분배와 커뮤니케이션 방식에 초점을 맞춘 패턴이다. 객체들이 어떤 방식으로 상호작용하며 특정 행위를 어떤 객체가 책임질지를 정리하는 데에 중점을 둔다. 이 패턴들을 통해 시스템의 유연성, 확장성, 유지보수성이 높아지며, 복잡한 조건문들을 제거
컴퓨터 구조를 공부할 때 CPU와 레지스터는 항상 같이 언급된다. 하지만 막상 설명하려고 하면 “중앙처리장치가 연산하고 레지스터는 저장한다” 정도로만 기억나고 이 둘이 어떻게 협력하는지 흐름이 잘 그려지지 않았다. 이번 TIL에서는 이 두 요소의 개념과 역할 그리고 그
프로그램이 느려질 때 병목 지점은 CPU가 아니라 메모리일 수 있다. 특히 CPU는 매우 빠르게 계산하지만 필요한 데이터를 메모리에서 가져오는 속도가 느리면 오히려 기다리는 시간이 길어진다. 이런 상황에서 등장하는 개념이 바로 캐시(Cache)와 메인 메모리(Main