컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어(core) 수와 같다. 만약 CPU의 코어 수보다 더 많은 스레드가 실행되면, 각 코어가 정해진 시간 동안 여러 작업을 번갈아가며 수행하게 된다. 이때 각 스레드가 서로 교체될 때 스레드 간의 문맥 교환(context switching)이라는 현상이 발생한다. 문맥 교환이란 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업을 가리킨다. 이러한 문맥 교환에 걸리는 시간이 커지면 커질수록, 멀티 스레딩의 효율은 저하된다. 오히려 많은 양의 단순한 계산은 싱글 스레드로 동작하는 것이 더 효율적일 수 있다. 따라서 많은 수의 스레드를 실행하는 것이 언제나 좋은 성능을 보이는 것은 아니라는 점을 유의해야 한다. 윈도우 ..
싱글스레드와 멀티스레드(Single Thread & Multi Thread) 프로그램 내의 처리 실행 단위 혹은 CPU의 이용 단위를 나타내는 단어에 스레드(Thread)가 있다. 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법을 싱글 스레드 프로그래밍(Single Thread Programming)이라고 한다. 반면, 동일 어드레스 공간의 메모리를 공유하면서 병렬로 처리하는 방법을 멀티 스레드 프로그래밍(Multi Thread Programming)이라고 한다. 복수의 cpu를 탑재한 컴퓨터에서 각각의 방법을 채용한 프로그램을 실행하면, 일반적으로는 멀티스레드 쪽이 혜택을 받기 쉽다. 싱글 스레드의 작동 방식 싱글 스레드는 프로세스 내에서 하나의 메인스레드만으로 작업을 처리한다. 그러므로..
프로세스(Process) 란? - 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) - 운영체제로부터 시스템 자원을 할당받는 작업의 단위 - 동적인 개념으로는 실행된 프로그램을 의미 - 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다 - 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. - 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근X - 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신 (IPC, inter-process communication) 을 사용해야 함. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용) 스레드(Threa..
정규화(Normalization)란? 정규화란, 각각의 엔터티가 하나의 릴레이션에 의해 표현된다라는 것을 보장하는 규칙적인 수학적 과정을 말한다. 정규화된 데이터베이스인 경우에는 데이터를 변경하더라도 논리적인 문제가 발생하지 않으며, 완벽성을 손상시키지 않고서도 데이터 중복을 최소한으로 유지할 수 있다. 정규화에는 대표적으로 1 정규화, 2 정규화, 3 정규화가 존재한다. 제 1 정규화 - 릴레이션(테이블)의 튜플(행)은 반드시 고유해야 한다. - 모든 특성들은 더 이상 분해할 수 없는 원자적이어야 한다. - 쉽게 생각하면 기본키의 특성을 갖는 속성이 있어야 한다. 위의 1 정규화의 정의는 릴레이션에 대한 반복적인 정의라고 볼 수 있다. 즉, 테이블이 진정한 릴레이션이 되려면, 이미 해당 테이블은 1 정..
함수적 종속이란? 함수적 종속(Functional Dependency)은 관계형 데이터베이스에서 두 개의 속성(Attribute)이나 열(Column) 사이의 종속성을 말한다. 어떤 릴레이션 R이 있을 때 X와 Y를 각각 속성의 부분집합이라고 가정해보자. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, "Y는 X에 함수적 종속된다." 라고 한다. 이 경우 X를 결정자, Y를 종속자라고 한다. 이를 기호로 표현하면 X→Y 이다. 이런 함수적 종속관계에는 아래와 같이 분류할 수 있다. 1. 완전 함수적 종속 2. 부분 함수적 종속 3.이행적 함수 종속 1. 완전 함수적 종속 완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 ..
제약조건이란 무엇인가? 관계형 모델의 큰 장점 중 하나는 데이터 모델의 한 부분으로 데이터 무결성을 정의할 수 있다는 것이다. 데이터 무결성은 데이터 모델에서 정의되는 제약 조건이라고 하는 규칙을 통해 구현되며, RDBMS에서 이 규칙들을 사용하게 된다. 데이터 무결성을 강화시키는 가장 간단한 방법은 속성 형식과 더불어 칼럼의 "NULL 허용 여부"를 지정하는 것이다. 또한, 데이터의 무결성을 확보하기 위해 칼럼마다 키(KEY)라는 속성을 사용할 수 있다. 제약조건 키 종류와 속성 1. 키(Key) - 열쇠는 무언가를 열거나 잠글 때 사용하는 것으로, 같은 것이 하나도 없다. - 이와 같이 키라는 것은 무언가를 식별하는 고유한 식별자(identifier) 기능을 한다. - 즉, 키는 데이터베이스에서 조건..
지난번 포스팅에서는 중첩 집합 방식 알고리즘을 적용한 댓글 구조에서 답글을 어떤 식으로 삭제하는지 알아봤습니다. 중첩 집합 방식에 대한 설명(삭제) - [Algorithm] 중첩 집합(2) 댓글 알고리즘 - 중첩집합(2) 지난번 포스팅에서는 기본적으로 중첩 집합 방식 알고리즘이 어떤 식으로 작동하는지에 대해 알아봤습니다. 중첩 집합 방식에 대한 설명 - [Algorithm] 중첩 집합(1) 이번 포스팅에서는 중첩 집합 goodbyeanma.tistory.com 이번 포스팅에서는 새로운 답변을 생성하는 경우 어떠한 구조로 로직을 생성해야 하는지 알아보겠습니다. 예를 들어 #2에 대한 새로운 답변(#32)을 추가해봅시다. 그럼 위 그림과 같은 트리 형식이 될 것입니다. 일단 새로운 답글 #32은 #2의 자식..
지난번 포스팅에서는 기본적으로 중첩 집합 방식 알고리즘이 어떤 식으로 작동하는지에 대해 알아봤습니다. 중첩 집합 방식에 대한 설명 - [Algorithm] 중첩 집합(1) 댓글 알고리즘 - 중첩집합(1) 지난번 포스팅에서는 경로 열거 방식 알고리즘을 적용해서 댓글을 구현해 봤습니다. 경로 열거 방식이 궁금하다면 - [Algorithm] 경로 열거 방식 경로 열거 방식에서는 경로 값의 무결성과 정합성 goodbyeanma.tistory.com 이번 포스팅에서는 중첩 집합 알고리즘을 통해 구현한 댓글에서 하나의 댓글이 지워지는 로직을 어떤 방법으로 구현할 것인지 생각해보고 그로 인해 생기는 문제점은 없는지 알아보겠습니다. 만약 위의 구조에서 #6의 댓글을 지우려면 아래와 같이 쿼리를 날리면 됩니다. BEGI..
지난번 포스팅에서는 경로 열거 방식 알고리즘을 적용해서 댓글을 구현해 봤습니다. 경로 열거 방식이 궁금하다면 - [Algorithm] 경로 열거 방식 댓글 알고리즘 - 경로열거(Path Enumeration) 지난번 포스팅에서는 "인접 목록 방식" 알고리즘을 적용해서 댓글을 구현해 봤습니다. 인접 목록 방식이 궁금하다면 - [Algorithm] 인접 목록 방식 인접 목록의 약점 중 하나는 트리에서 주어진 노 goodbyeanma.tistory.com 경로 열거 방식에서는 경로 값의 무결성과 정합성을 보장할 수 없다는 점과, 결국 문자열로 경로를 저장하기 때문에 경로의 깊이 자체에도 한계가 있다는 단점이 있었습니다. 중첩 집합은 각 노드가 자신의 부모를 저장하는 대신 자기 자손에 집합에 대한 정보를 저장합..
지난번 포스팅에서는 "인접 목록 방식" 알고리즘을 적용해서 댓글을 구현해 봤습니다. 인접 목록 방식이 궁금하다면 - [Algorithm] 인접 목록 방식 인접 목록의 약점 중 하나는 트리에서 주어진 노드의 조상들을 얻는 데 비용이 많이 든다는 것입니다. 경로 열거 방법에서는 일련의 조상을 각 노드의 속성으로 저장해 이를 해결합니다. 디렉터리 구조와 비슷한데 /user/local/test/ 와 같은 unix 경로와 비슷하다고 생각하면 됩니다. CREATE TABLE dbo.COMMENT_TEST_PATH ( comment_idbigint not null, pathvarchar(1000) null,-- 경로를 저장해줄것 commentnvarchar(500) not null, comment_datedateti..