본문 바로가기

ComputerScience

(72)
[DataStructure] Java에서 Linked List는 Queue와 List를 모두 사용할 수 있다. + (Iterable, Collection, List, Queue ... 요약) 코딩 테스트 문제를 풀면서 문득 'LinkedList는 List로도 사용할 수 있고, Deque로도 사용할 수 있는 것 같네' 란 생각이 들었는데요, List와 Deque를 모두 구현하고 있었군요.위 이미지는 LinkedList가 상속하고 구현하고 있는 클래스, 인터페이스 들을 다이어그램으로 표시한 그림인데요, 이 글에서는 이 LinkedList와 관련된 각 클래스, 인터페이스를 살펴보고자 합니다. IterableIterable 인터페이스는 Java에서 컬렉션을 순회하는 표준 방법을 제공한다. 이 인터페이스는 컬렉션의 요소들을 순회할 수 있도록 해준다. Iterator iterator()Iterable 인터페이스는 Java에서 컬렉션을 순회하는 표준 방법을 제공한다.주요 메서드는 다음과 같다.Iterat..
[OS] 동기화(Synchronization)와 경쟁 조건(Race Condition), 임계 영역(Critical Section) 하나의 객체를 두 개의 스레드가 접근할 때 발생하는 일class SharedResource { private int count = 0; public void increment() { count++; } public int getCount() { return count; }}class ThreadA extends Thread { private SharedResource resource; public ThreadA(SharedResource resource) { this.resource = resource; } public void run() { for (int i = 0; i 위 코드에서 ThreadA와 Th..
[OS] 스레드 풀(thread pool)은 무엇인가? Thread per request modelRequest마다 하나의 Thread를 할당시켜 하나의 Request는 하나의 Thread가 처리하도록 동작하는 모델이다. 문제점만약 Thread per reqeust 모델의 동작 방식이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고, 처리가 끝난 스레드는 버리는 식으로 동작한다면 스레드 생성에 소요되는 시간 때문에 요청 처리가 더 오래 걸린다.처리 속도보다 더 빠르게 요청이 늘어나면 스레드가 계속 생성이 되어 메모리가 고갈되고, 컨텍스트 스위칭이 더 자주 발생한다.이는 CPU 오버헤드 증가로 CPU Time이 낭비가 된다.어느 순간 서버 전체가 응답 불가능한 상태에 빠진다.Thread Pool미리 정해진 개수만큼 Thread를 생성해 놓고, 내부적으..
[OS] 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍 사전 배경 지식 정리프로그램(Program)컴퓨터가 실행할 수 있는 명령어들의 집합이다. 프로세스(Process)컴퓨터에서 실행 중인 프로그램이다.각각의 프로세스는 독립된 메모리 공간을 할당받는다.프로세스는 명령어들과 데이터를 가진다. CPU(Central processing unit)명령어를 실행하는 연산 장치이다. 메인 메모리프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO(input/output)파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것입출력 장치(e.g. 키보드, 마우스)와 데이터를 주거나 받는 것 단일 프로세스 시스템초창기 시스템은 단일 프로세스 시스템이었다.단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행할 수 있다.따라서 다른 프로그램을 실행시키려면 현재 실행되고 ..
[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..