분류 전체보기 (52) 썸네일형 리스트형 선형 보간법 (Linear Interpolation) 선형 보간법(Linear Interpolation) 이란?선형 보간법은 두 점 사이의 값을 추정하는 방법입니다. 이 두 점 사이에 직선을 그린 후, 직선 위의 임의의 점에서 값을 예측합니다. 쉽게 말하면, 두 지점 사이에서 값이 선형적으로(일직선 형태로) 변화한다고 가정하고, 그 사이에 있는 값들을 계산하는 방법입니다.예시로 개념 이해하기만약 어떤 사람이 2시간 동안 달렸다고 생각해봅시다.1시간 동안은 5km를 달렸고,2시간이 지났을 때는 10km를 달렸다고 가정합니다.이 두 지점 사이에 있는 1시간 30분이 지났을 때, 이 사람이 몇 km를 달렸을지 추정하려고 합니다. 이때 선형 보간법을 사용하여 그 중간 값을 쉽게 계산할 수 있습니다. 1시간에서 2시간까지 거리는 일직선으로 증가한다고 가정하고, 이 .. [NIO] FileChannel 과 FileInput/Output Stream 과의 차이 FileChannel 은 Java의 java.nio.channels 패키지에 속하는 클래스로, 파일에서 데이터를 읽고, 쓰고, 매핑하는 기능을 제공한다. FileChannel은 입출력(I/O) 작업에 대해 더 높은 성능과 유연성을 제공하는 NIO (New Input/Output)의 핵심 요소 중 하나이다. 이 클래스는 버퍼와 채널을 사용하여 파일의 데이터를 직접 조작할 수 있는 메커니즘을 제공하여, 기존의 FileInputStream, FileOutputStream, RandomAccessFile 등을 통한 데이터 처리 방식보다 더 효율적인 작업이 가능하다. FileChannel의 주요 역할 읽기 및 쓰기 작업: FileChannel을 통해 파일의 특정 위치에서 데이터를 읽거나 쓸 수 있다. 이를 통해 .. LSM Tree Compaction (Leveled Compaction) LSM tree 는 주기적인 compaction 을 통해 꾸준히 증가하는 disk 의 table 수를 줄이며, 중복된 키에 대한 조정 작업을 수행한다. compaction 은 병합과 조정 알고리즘을 사용해 전체 record 를 순회하고 결과를 새로 생성한 테이블에 저장한다. LSM tree 의 구조상 disk 에 쓰여져 있는 SSTable 의 record 는 정렬되어 있고, merge sort algorithm 의 특성상 iterator 의 head 만 memory 에 저장하기 때문에 memory 사용량 상한이 존재한다. 이러한 compaction 과정을 최적화 하기 위해 널리 알려진 방법중에 하나가 leveled compaction 이다. Merge - Interation Leveled Compacti.. Mutex vs Semaphore Mutex Mutex 라는 이름은 Mutual Exclustion (상호배제) 를 의미하며 critical section 의 shared data 를 보호하기 위해 사용된다. Mutex 는 한 번에 오직 한개의 thread 가 resource 에 접근하는 것을 허용하며 Java 에서 Mutex 의 전형적인 예시는 Synchronized block 이다. Semaphore Semaphore 는 mutex 와는 다르게 resource 에 제한된 접근을 하기 위해 사용된다. Semaphore 는 제한된 숫자의 허가증을 가지고 있다고 생각하자. 만약 Semaphore 가 가지고 있는 허가증을 모두 사용했을 경우, 허가증을 사용한 이전 thread 가 허가증을 return 할 때까지 신규 thread 의 허가 요.. Critical Section & Race Condition Critical Section Critical Section 은 여러개의 thread 에 의해 data 나 resource 가 공유되는 부분을 일컫는다. Race Condition Race Condition 은 thread 가 동기화 되어 있지 않은 상태에서 critical section 영역을 여러 thread 들이 실행할때 발생한다. thread 들은 shared section 을 통해 shared resource 를 읽거나 쓰는 “race” 를 수행하며 각 thread 들이 race 를 끝내는 순서대로 출력을 하게 된다. Race Condition 상황에서는 thread 가 다른 thread 가 접근하고 있는 공유된 자원이나 변수에 접근을 하게 되므로, data 의 일관성이 깨지게 된다. Deadlock, liveness, Live lock, Starvation Critical Section 을 지키고 Race Condition 을 피하려고 애쓰는동안, Multithread code 의 미묘한 "논리적인 오류" 가 생길수도 있다. 그 논리적인 오류들의 패턴은 다음과 같다. Deadlock deadlock 은 두개 이상의 thread 가 진행을 할 수 없을 경우에 발생한다. 첫번째 스레드가 필요로 하는 resource 를 두번째 스레드가 보유하고 있고, 두번째 스레드가 필요로 하는 resource 를 첫번째 스레드가 보유하고 있을 경우 발생한다. 예를 들어, 아래와 같은 코드에서 increment 의 mutex A 획득과 decrement 의 mutex B 획득이 동시에 이루어졌을때, 그 다음 mutex 를 획득하기 위해 두개의 thread 는 무한히 대기할 것이.. Birthday Problem (생일 문제) 생일 문제는 확률 이론의 유명한 예제 중 하나로, 특정 집단 내에서 적어도 두 명의 사람이 같은 생일을 가질 확률을 계산하는 문제이다. 이 문제는 직관적으로 생각했을 때 예상치 못하게 높은 확률을 보여주기 때문에 The birthday paradox 라고도 불린다.생일 문제의 기본생일 문제에서는 일반적으로 365 일이 있는 한 해를 가정하며, 윤년은 고려하지 않는다. 문제의 기본적인 질문은 “어떤 방에 사람들이 있을 때, 적어도 두 사람이 같은 생일일 확률은 얼마인가?” 이다.계산방법이 확률을 계산하는 가장 쉬운 방법은 충돌이 발생하지 않을 확률을 계산한 다음 그 값에서 1을 빼는 것이다.예를 들어, 한 방에 사람이 n 명 있을 경우, 첫 번째 사람의 생일은 어느 날이든 될 수 있고, 두 번째 사람의 생.. [데이터 중심 애플리케이션 설계] 1. 데이터 시스템에 대한 생각 오늘날 많은 애플리케이션은 계산 중심(compute-intensive) 과는 다르게 데이터 중심(data-intensive) 적이다. 이러한 애플리케이션의 경우 CPU 성능은 애플리케이션을 제한하는 요소가 아니며, 더 큰 문제는 보통 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도이다. 일반적으로 데이터 중심 애플리케이션은 공통으로 필요로 하는 기능을 제공하는 표준 구성 요소 (standard building block) 로 만든다. 예를 들어, 많은 어플리케이션은 다음을 필요로 한다. 구동 애플리케이션이나 다른 애플리케이션에서 나중에 다시 데이터를 찾을 수 있게 데이터를 저장 (데이터베이스) 읽기 속도 향상을 위해 값비싼 수행 결과를 기억(캐시) 사용자가 키워드로 데이터를 검색하거나 다양한 방법으로.. [NIO] Selection 네트워크 프로그래밍을 위한 새 I/O API 의 두 번째 부분은 준비된 것을 선택하는 것이다. 준비된 채널을 선택함으로써 읽고 쓸때 블록하지 않아도 된다. 이 내용은 주로 서버의 관심사이지만, 여러 개의 창을 띄워서 동시에 여러 연결을 시도하는 웹 스파이더나 브라우저 같은 클라이언트 프로그램에서도 활용할 수 있다. 준비된 것을 선택하기 위해서는 서로 다른 채널들이 Selector 객체에 등록되어야 하며, 이때 각 채널에 할당되는 SelectionKey 가 사용된다. 그리고 나서 프로그램은 Selector 객체에게 작업을 수행할 준비가 된 채널 키의 세트를 요청한다. Selector class 셀렉터에 있는 유일한 생성자는 protected 로 선언되어 있다. 일반적으로 새로운 셀렉터는 정적 팩토리 메소드.. [NIO] Socket Channel 채널은 파일, 소켓, 데이터그램 등과 같은 다양한 I/O 소스로부터 데이터 블록을 버퍼로 쓰거나 읽어온다. 네트워크 프로그래밍을 위해서는 SocketChannel, ServerSocketChannel, DatagramChannel 세개가 가장 중요하다. 그리고 TCP 연결을 위해서는 이 중에서도 앞의 두 개의 채널만 필요하다. 1. SocketChannel class SocketChannel 클래스는 TCP 소켓에 대해 읽고 쓴다. 읽고 쓸 데이터는 ByteBuffer 객체로 먼저 인코딩 되어야 한다. 각각의 SocketChannel 은 Socket 객체와 연결되어 있다. 연결하기 SocketChannel 클래스는 public 으로 선언된 생성자를 제공하지 않는다. 대신에 다음 두 정적 open() 메소.. 이전 1 2 3 4 ··· 6 다음 목록 더보기