2024/08/12 4

Map & Hash table

해시 테이블은 키-값 쌍을 효율적으로 저장하고 검색하기 위한 자료구조이다.데이터를 저장할 때 키를 해시 함수에 입력하여 해시 값을 생성하고, 이 값을 이용해 배열(버킷 배열)의 특정 위치에 데이터를 저장한다.자바의 HashMap과 같은 자료구조가 이에 해당한다. 동작 방식키를 해시 함수에 입력: 해시 함수는 주어진 키를 입력으로 받아, 고정된 크기의 해시 값을 생성한다. 이 해시 값은 보통 정수 형태이다.해시 값의 인덱스 계산: 생성된 해시 값에 배열의 크기(해시 테이블의 크기, capacity)를 나누는 모듈러 연산(%)을 수행하여 인덱스를 계산한다. 이 인덱스는 데이터가 저장될 배열의 위치를 결정한다.데이터 저장: 계산된 인덱스에 키와 값을 함께 저장한다. 해시 테이블은 일반적으로 (key, hash..

Priority Queue & Heap

Priority Queue (우선순위 큐)우선순위 큐는 각 요소에 우선순위를 부여하여, 우선순위가 높은 요소가 먼저 처리되는 큐이다. 일반적인 큐는 FIFO(First-In, First-Out) 방식으로 작동하지만, 우선순위 큐는 우선순위에 따라 처리 순서가 결정된다.구현배열: 정렬된 배열이나 정렬되지 않은 배열로 구현할 수 있지만, 삽입과 삭제의 효율성에 따라 성능 차이가 있다.연결 리스트: 정렬된 연결 리스트로 구현하면, 삽입은 더 복잡하지만 삭제는 간단해진다.힙(Heap): 가장 효율적인 구현 중 하나로, 우선순위 큐의 삽입과 삭제를 로그 시간 복잡도로 처리할 수 있다.주요 동작Insert: 새로운 요소를 큐에 추가하면서 우선순위를 고려하여 적절한 위치에 배치한다.Delete (Extract): 우..

Blocking I/O & Non-Blocking I/O

블록 I/OI/O 작업을 요청한 프로세스나 스레드가 작업이 완료될 때까지 대기하는 방식이다. 이 방식은 단순하고 직관적이지만, 블록 상태로 인해 자원 활용에 비효율적일 수 있다.물론, 스레드가 I/O 작업 때문에 블록 되는 동안, CPU 코어는 다른 스레드에게 할당될 수 있다. 이 경우 CPU는 여전히 다른 작업을 수행할 수 있지만 대량의 스레드가 블록 상태로 대기하면 시스템 자원(메모리, 스레드 관리 오버헤드 등)을 낭비할 수 있다.동작 과정스레드가 read 시스템콜을 수행한다.스레드는 블락 상태가 되어 커널 모드로 전환된다.커널이 I/O 작업을 수행하고 관련 디바이스에 요청을 보낸다.디바이스가 요청을 처리하고 커널로 응답을 보낸다.커널이 유저 스페이스로 데이터를 이동시킨다.스레드는 작업이 완료되면 다..

CS 2024.08.12

스레드의 종류

하드웨어 스레드CPU가 메모리에서 데이터를 읽거나 쓸 때 지연이 발생한다. 이 시간을 비효율적으로 보내지 않기 위해 생겨난 기술로, 물리적 CPU 코어가 동시에 여러 작업을 수행할 수 있도록 지원하는 기술이다.이 스레드는 운영 체제(OS)에서 가상의 코어로 인식되며, OS는 이를 실제 물리적 코어로 간주하여 스케줄링한다.싱글 코어 CPU에 하드웨어 스레드가 두 개 있다면, OS는 이를 듀얼 코어 CPU로 인식해 스레드를 할당하고 스케줄링한다.인텔 Hyper-Threading: 인텔의 하이퍼 스레딩 기술은 하나의 물리적 코어에 두 개의 하드웨어 스레드를 할당하여, 코어가 동시에 두 개의 스레드를 처리할 수 있게 한다. 이를 통해 CPU의 유휴 시간을 줄이고 자원을 최대한 활용할 수 있다. 예를 들어, 하이..

CS 2024.08.12