Study
-
[컴퓨터 밑바닥의 비밀] 2.1 운영체제, 프로세스, 스레드Study/컴퓨터 밑바닥의 비밀 2025. 3. 1. 18:21
2.1.1 모든 것은 CPU에서 시작된다CPU는 스레드, 프로세스, 운영체제 같은 개념을 알지 못함CPU는 단지 다음 두 가지 상항만 알고 있음메모리에서 명령어를 하나 가져온다.(dispatch)이 명령어를 실행한 후 다시 1로 돌아간다. Q. CPU는 어떤 기준으로 메모리에서 명령어를 가져올까?PC(program counter) 레지스터에 저장된 명령어 주소를 사용해 가져온다.레지스터는 용량은 매우 작지만 속도는 빠른 일종의 메모리PC 레지스터에 저장되는 것은 CPU가 다음에 실행할 명령어의 주소이다. Q. PC 레지스터의 명령어 주소는 누가 설정할까?PC 레지스터가 저장하는 주소는 기본적으로 1씩 자동 증가한다.대부분 CPU가 주소를 하나씩 증가시키면서 차례대로 명령어를 실행하기 때문if else 또..
-
[컴퓨터 밑바닥의 비밀] 2.6 동기와 비동기Study/컴퓨터 밑바닥의 비밀 2025. 3. 1. 02:42
1. 동기 호출동기 방식의 함수 호출funcA(){ // funcB 함수가 완료될 때까지 기다린다. funcB(); ...}funcA 함수가 funcB 함수를 호출하면, funcB 함수 실행이 완료될 때까지 funcA 함수의 나머지 코드는 실행되지 않음즉, funcA 함수는 반드시 funcB 함수 실행이 완료될 때까지 기다려야 함 특징순차적으로 진행되기 때문에 직관적이어서 이해하기 쉬움일부 상황(I/O 작업 포함된 경우)에서 호출자가 요청한 작업이 끝날 때까지 기다려야 하기 때문에 효율이 높지 않음 Q. 동기 호출될 때 입출력 작업이 포함되어 있으면 어떻게 동작하는가?예시) 입출력 작업을 할 때 다음과 같이 read 함수를 호출하여 파일을 읽는 상황...read(file, buf)..
-
[카프카 핵심 가이드] CH6. 카프카 내부 메커니즘Study/카프카 핵심 가이드 2025. 2. 19. 00:12
✅ 주요 내용카프카 컨트롤러카프카에서 복제(replication)가 작동하는 방식카프카가 프로듀서와 컨슈머의 요청을 처리하는 방식카프카가 저장을 처리하는 방식 (파일 형식, 인덱스 등) 6.1 클러스터 멤버십카프카는 현재 클러스터의 멤버인 브로커들의 목록을 유지하기 위해 아파치 주키퍼를 사용함각 브로커는 고유한 식별자를 갖음(브로커 설정 파일에 정의하거나 자동으로 생성)주키퍼의 브로커 관리 방식브로커 프로세스는 시작될 때마다 주키퍼에 Ephemeral(휘발성) 노드의 형태로 ID를 등록함카프카 브로커들과 다른 툴들은 브로커가 등록되는 주키퍼의 /brokers/ids 경로를 구독해 브로커가 추가/제거되었을 때 알림 수신동일한 ID를 가진 다른 브로커 시작 시 에러 발생브로커와 주키퍼 간 연결이 끊어질 경우..
-
[카프카 핵심 가이드] CH4. 카프카 컨슈머: 카프카에서 데이터 읽기 (2)Study/카프카 핵심 가이드 2025. 2. 13. 20:00
4.6 오프셋과 커밋poll()을 호출할 때마다 카프카에 쓰여진 메시지 중 컨슈머 그룹에 속한 컨슈머들이 아직 읽지 않은 레코드가 리턴됨카프카의 고유한 특성 중 하나는 컨슈머로부터의 응답을 받는 방식이 아니라는 점대신, 컨슈머가 카프카를 사용해 각 파티션에서의 위치를 추적할 수 있게 함파티션에서의 현재 위치를 업데이트하는 작업을 '오프셋 커밋'이라고 함카프카는 레코드를 개별적으로 커밋하지 않음컨슈머는 파티션에서 성공적으로 처리해 낸 마지막 메시지를 커밋하여 그 앞의 모든 메시지들 역시 성공적으로 처리되었음을 암묵적으로 나타냄poll()이 리턴한 마지막 오프셋 바로 다음 오프셋을 커밋하는 것이 기본적인 작동!카프카의 __consumer_offsets 토픽에 각 파티션별로 커밋된 오프셋을 업데이트하는 메시지..