ComputerScience 80

[OS] 스레드 풀(thread pool)은 무엇인가?

Thread per request modelRequest마다 하나의 Thread를 할당시켜 하나의 Request는 하나의 Thread가 처리하도록 동작하는 모델이다. 문제점만약 Thread per reqeust 모델의 동작 방식이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고, 처리가 끝난 스레드는 버리는 식으로 동작한다면 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸린다.처리 속도보다 더 빠르게 요청이 늘어나면 스레드가 계속 생성이 되어 메모리가 고갈되고, 컨텍스트 스위칭이 더 자주 발생한다.이는 CPU 오버헤드 증가로 CPU Time이 낭비가 된다.어느 순간 서버 전체가 응답 불가능한 상태에 빠진다.Thread Pool미리 정해진 개수만큼 Thread를 생성해 놓고, 내부적으..

ComputerScience/OS 2024.05.04

[OS] 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍

사전 배경 지식 정리프로그램(Program)컴퓨터가 실행할 수 있는 명령어들의 집합이다. 프로세스(Process)컴퓨터에서 실행 중인 프로그램이다.각각의 프로세스는 독립된 메모리 공간을 할당받는다.프로세스는 명령어들과 데이터를 가진다. CPU(Central processing unit)명령어를 실행하는 연산 장치이다. 메인 메모리프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO(input/output)파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것입출력 장치(e.g. 키보드, 마우스)와 데이터를 주거나 받는 것 단일 프로세스 시스템초창기 시스템은 단일 프로세스 시스템이었다.단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행할 수 있다.따라서 다른 프로그램을 실행시키려면 현재 실행되고 ..

ComputerScience/OS 2024.05.04

[Database] DB MVCC와 PostgreSQL, MySQL의 동작 비교

기존 Lock based Concurrency Control read-lockwrite-lockread-lockOXwrite-lockXX 위 표는 각 read와 write lock의 호환 관계를 나타낸 표이다.예를 들어 두 Transaction이 모두 read-lock + read-lock을 가지고 있을 때는 block이 될 필요 없지만, 한 Transaction이 read-lock, 다른 Transaction은 write-lock을 가지고 있을 경우 둘 중 하나만 실행이 가능하며, 다른 한쪽은 unlock 할 때까지 기다려야 한다. 이러한 호환성 문제를 개선하기 위해서 MVCC(Multiversion Concurrency Control)가 등장한다.MVCC (Multiversion Concurrency..

[Database] LOCK을 활용한 concurrency control 기법 + 2PL (two-phase locking)

Lock여러 Transaction이 같은 데이터에 read / write를 한다면 예기치 못한 데이터 변경이 일어날 수 있다.이를 막기 위해 데이터를 Lock이라는 장치를 설정하여, Lock을 취득하기 전까진 그 데이터의 read/write를 못하게 막을 수 있다. Write Lock (Exclusive Lock)read / write(insert, modify, delete)할 때 사용한다.다른 transaction이 같은 데이터를 read / write 하는 것을 허용하지 않는다.write 할 때만 사용하는 것은 아니다. Read Lock (Shared Lock)read 할 때 사용한다.다른 transaction 같은 데이터를 read 하는 것은 허용한다.Lock을 사용한 시나리오상황Transacti..

[Database] DB concurrency control: schedule과 serializability, recoverability

Lost Update 현상데이터베이스 시스템에서 Lost Update는 동시에 실행되는 두 트랜잭션이 동일한 데이터 항목을 업데이트하여 이전 업데이트가 손실되는 현상을 의미합니다.다음과 같은 상황에서 발생할 수 있습니다. Alice가 Transaction을 시작합니다.동시에 Bob도 Transaction을 시작합니다. 이 때 Product의 quantity와 likes는 Alice, Bob에게 각각 7, 5 입니다.Alice가 product의 quantity를 6으로 Update 합니다.Bob은 product의 quantity를 10으로 Update 합니다.Alice는 자신의 Update를 Commit 하여 DB에 반영합니다.Bob 또한 자신의 Update를 Commit 하여 DB에 반영합니다. 결과적으..

[Database] isolation이 안될 때 나타날 수 있는 여러 현상

Isonlation이 안될 때 발생할 수 있는 이상한 현상들Dirty Readcommit 되지 않은 변화를 읽어서 이상한 값이 반영되는 상황을 Dirty Read 라고 한다.예시를 살펴보자.Transaction 1 Begins: A가 어떤 계좌에 $100 달러를 입금하려 한다. (Transaction 1) 현재 계좌 잔액은 $500 달러이다.Transaction 1 Modifies Data: Transaction 1은 새 잔액을 계산한다.($500 + $100 = $600) 하지만 commit은 하지 않는다.Dirty Read Occurs: 또 다른 transaction이 시작하여 계좌에 $500 달러를 read 한다. (Transaction 2)Transaction 2 Reads Uncom..

[CS] 시간 복잡도란

시간 복잡도(Time Complexity)란 시간 복잡도(Time Complexity)란 알고리즘을 실행하는데 걸리는 시간을 입력 길이의 함수로 정의한 것입니다. 알고리즘의 각 문장을 실행하는데 걸리는 시간을 측정하는 것이 아니라 알고리즘에서 연산의 수가 증가하거나 감소할 때 실행 시간의 변화(증가 또는 감소)에 대한 정보를 제공하는 것입니다. Big O 표기법으로 시간복잡도 계산하기 시간 복잡도는 입력 길이의 함수로 나타나는 시간입니다. 여기에는 입력 데이터 크기(n)와 시간에 대한 연산 수(N) 사이에 관계가 존재합니다. 이 관계는 시간 복잡도의 성장 속도(Order of growth)로 표기되며, O(n) 형태와 같은 표기법을 사용합니다. 여기서 O는 성장 속도를 나타내고 n은 입력 길이입니다. B..

[DataStructure] Map과 Hash Table

Map key-value pair들을 저장하는 ADT(Abstract Data Type)이다. key는 중복되지 않고 value는 중복될 수 있다. associative array, dictionary라고 불리기도 한다. Hash Table Hash Table(해시 테이블)은 Hash function(해시 함수)과 Array을 활용한 Map 자료 구조이며, 모든 데이터에 상수 시간 접근이 가능하다. 해시 함수의 역할은 데이터를 고정된 크기의 데이터로 변환하는 것으로, 해시 테이블에서는 데이터를 정수 값으로 변환하는 함수다. 해시 함수를 통해 값이 할당된 인덱스에 데이터를 저장하며, 배열의 크기로 모듈러 연산을 통해 인덱스 위치 지정한다. Hash Collision Hash Collision(해시 충돌)은..

[DataStructure] Array, List와 Array List, Linked List

배열(Array) 메모리의 연속된 공간에 값이 채워져 있는 형태의 자료구조 이다. 배열의 값은 인덱스를 통해 참조할 수 있으며, 선언한 자료형의 값만 저장할 수 있다. 배열은 동적으로 값을 삽입하거나 삭제하려면 본래의 값들을 이동시켜야 하는 과정이 필요해서 시간이 소요된다. 리스트(List) 리스트는 값과 포인터를 묶은 로드라는 것을 포인터로 연결한 자료구조이다. 리스트는 인덱스가 없으므로, 값에 접근하기 위해 Head 포인터에서 순서대로 접근해야 한다. 접근 시간은 느리지만, 데이터 삽입과 삭제 연산 속도는 빠르다. ADT(Abstract Data Type)에서 List는 순서가 있고 중복을 허용하는, 값들을 저장하는 추상 자료형으로 사용된다. Set이나 Map을 사용하는게 더 적절한 상황이 아니라면 ..

[DataStructure] Array, Dynamic Array, Associative Array

Array(배열) 배열은 같은 타입의 데이터를 연속된 메모리 공간에 저장하는 자료 구조이다. 각 데이터는 인덱스로 접근 가능하며, 인덱스는 배열에서 오프셋 개념으로 이해된다. 인덱스는 0부터 시작하여 각 원소에 대한 위치를 가리킨다. 데이터는 연속된 메모리 공간에 할당되며, 인덱스는 해당 위치를 가리킨다. 이러한 동작 원리로 배열은 같은 타입의 데이터를 메모리에 연속적으로 저장한다. 2차원 배열은 메모리상 1차원으로 표현되며, 각 행은 메모리 주소로 구성됨. 연속적인 메모리 공간으로 데이터를 저장하면 CPU 캐시를 통해 데이터 접근 시간을 단축할 수 있음. 객체를 배열에 저장하는 경우 객체 배열은 각 객체의 레퍼런스를 연속적인 메모리 공간에 저장하고, 실제 객체들은 메모리에 띄엄띄엄 저장됨. Dynami..