본문 바로가기

Computer Science

(46)
[Lecture 16] Automatic Memory Management / 가비지 컬렉션 #Automatic Memory Management 명시적(explicit) 메모리 관리(예: malloc() 및 free()를 통한)는 오류가 발생하기 쉽다. 이에 반해, 대부분의 현대 언어들은 자동 메모리 관리또는 가비지 컬렉션이라고도 불리는 "암묵적 메모리 관리" 형태를 제공한다 명시적 메모리 관리는 복잡하며, 다양한 오류가 발생할 수 있다: 메모리를 너무 일찍 해제하면 use-after-free 오류가 발생할 수 있다. 메모리 해제를 너무 늦게 하거나 전혀 하지 않으면, 메모리 누수(leak)의 위험이 있다. 자동 메모리 관리 시스템은 객체의 소유권과 수명을 식별하는 원칙적인 설계를 필요로 한다. 이는 API 설계를 복잡하게 만들 수 있으나, 프로그래밍에서 발생할 수 있는 여러 문제들(메모리 누수..
[Lecture 7] 멀티쓰레딩 - Introduction to Multithreading #멀티태스킹 우리가 새로운 게임이 출시되었을때, 게임웹사이트에 들어가 다운로드를 하는데 다운로드를 하는 동안 컴퓨터 전체가 멈춰있으면 어떨까? 오래전 컴퓨터들은 이러한 작업을 한번에 하나밖이 실행 하지 못했기 때문에, 여러작업을 동시에하는 현대 컴퓨터와는 달리 굉장히 불편했다. 하지만 현재 컴퓨터들은 프로세스 여러개를 한번에 돌릴수 있기 때문에 이러한 불편함을 없앨 수 있었다. 바로 이렇게 컴퓨터가 여러개의 프로세스, 작업을 동시에 여러 개 실행하는 것이 멀티 태스킹이다. CTRL - Shift - ESC를 눌러보면 얼마나 많은 프로세스들이 백그라운드에서 돌아가고 있는지 볼 수 있다. 여러 프로세스를 함께 실행시키는 작업은 동시적 (concurrency), 병렬적 (parallel), 또는 둘의 혼합으로..
[Lecture 9] 멀티쓰레딩 III - Semaphores / 세마포어 #식사하는 철학자 문제 / Dining philosophers problem위의 사진처럼, 5명의 철학자가 같이 식사를 하려고 모였다고 가정하자. 식탁에는 맛있는 스파게티가 올라와 있고, 각 스파게티 접시 사이에 포크가 하나 씩 있다. 하지만 이 모임에 있는 철학자들은 단순히 음식을 먹지 못한다. 이 철학자들이 음식을 먹기 위해선 다음과 같은 규칙을 따라야 한다.1. 일정 시간 생각을 한다.2. 왼쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.3. 오른쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.4. 만약 양쪽의 포크를 잡으면 일정 시간만큼 식사를 한다.5. 오른쪽 포크를 내려놓는다.6. 왼쪽 포크를 내려놓는다.7. 다시 1번으로 돌아가 반복한다.굉..
[Lecture 21] HTTP #개요 이번 포스트에서는 현대 웹 기반 애플리케이션뿐만 아니라 전 세계 웹의 기본 프로토콜인 Hypertext Transfer Protocol HTTP에 대해 알아보자. HTTP란 인터넷에서 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약이다. 하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다. http는 1989년 팀 버너스 리(Tim Berners Lee)에 의하여 처음 설계되어 인터넷을 통한 월드 와이드 웹(World-Wide Web) 기반에서 전 세계적인 정보공유를 이루는데 큰 역할을 하였다. http의 첫번째 버전은 인터넷..
[Lecture 10] Heap / 힙 #Heap 이란 컴퓨터의 기억 장소에서 그 일부분이 프로그램들에 할당되었다가 회수되는 작용이 되풀이되는 영역. 스택 영역은 엄격하게 후입 선출(LIFO) 방식으로 운영되는 데 비해 히프는 프로그램들이 요구하는 블록의 크기나 요구/횟수 순서가 일정한 규칙이 없다는 점이 다르다. 대개 히프의 기억 장소는 지시자(pointer) 변수를 통해 동적으로 할당받고 돌려준다. 이는 연결 목록이나 나무, 그래프 등의 동적인 자료 구조를 만드는 데 꼭 필요한 것이다. 쉽게 말해 여러 개의 값 중에서 가장 크거나 작은 값을 빠르게 찾기 위해 만든 이진 트리이다. 짧게 힙(Heap)이라고 줄여서 부른다 영단어 힙(heap)은 '무엇인가를 차곡차곡 쌓아올린 더미'라는 뜻을 지니고 있다. 힙은 항상 완전 이진 트리의 형태를 띠..
[Lecture 17] Automatic Memory Management, Performance # Performence of Automatic Memory Management 실제 garbage collector들은 그들이 만드는 절충안에 매우 다양하다. 개발자들은 수십 년 동안 그것들을 설계하는 데 소비되어 왔다. 예를 들어, 자바 10은 4개의 다른 컬렉터와 함께 사용된다. ZGC는 2018년에 추가된 5번째 컬렉터이다 프로그램 처리량, 메모리 오버헤드, GC 처리량, 확장성 등 많은 특성이 다르다 garbage collector의 정책을 적절히 조정하고 성능에 미치는 영향을 이해하려면 작업 부하를 잘 이해해야 한다 #Modeling the Cost of GC Compacting Collectors: Garbage collector는 객체 그래프, 특히 다른 객체에 대한 포인터가 저장되는 위치..
[Lecture 20] Sorting Analysis / 정렬 알고리즘 분석 #개요 이번 포스트에서는 정렬 알고리즘들의 시간 복잡도 / time complexity를 분석해보자 #Insertion Sort 이제 정렬 알고리즘 하나인 삽입 정렬에 대해 알아보자. 삽입 정렬 알고리즘이란 한 번에 한 개씩 적당한 위치를 찾아 삽입·배치하는 알고리즘이다. 배열 내 데이터를 순회하며 정렬이 필요한 요소를 적당한 위치에 삽입하는 알고리즘이다. 즉 새로운 데이터를 이미 정렬된 데이터들 사이의 적절한 자리에 집어넣는 정렬방식이다. 삽입 정렬 자바 코드: public void insertionSort(T[] A) { int j; for (int p = 1; p 0 && temp.compareTo(A[j-1]..
[Lecture 18] Sorting Algorithm / 정렬 알고리즘 #정렬 알고리즘 컴퓨터 분야에서 중요시되는 알고리즘 가운데 하나로 어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 알고리즘이다. 실제 컴퓨터 분야에서 사용하는 데이터의 경우 숫자의 순서나 어휘의 순서대로 정렬한 다음 사용해야 되는 경우가 거의 항상 발생하는데 이걸 얼마나 효과적으로 해결할 수 있느냐가 정렬 알고리즘의 핵심이다. 정렬 알고리즘이란 데이터 요소의 집합을 일정한 순서로 배열하는 알고리즘이다. 쉽게 말해 정렬(sort)이란 데이터를 일정한 규칙에 따라 재배열하는 것을 의미한다. 각 요소 내의 1개 또는 복수의 1개 또는 복수의 키값을 바탕으로 하여 배열하는 경우도 있다. 정렬 알고리즘으로는 버블 정렬, 분산 정렬, 삽입 정렬, 병합 정렬, 퀵 정렬 등이 있다. [네이버 지식백과 / 나..