본문 바로가기

전체 글

(109)
동기화 문제의 해결 멀티프로그래밍 작업을 할 때 프로세스는 독립적으로 작업을 하거나, 공유된 자원을 활용하여 공동작업을 하기도 한다. 멀티 프로세싱은 IPC(프로세스 간 통신방법)를 통해 자원을 공유하고, 멀티스레딩의 스레드들은 프로세스의 메모리 영역(코드, 데이터, 힙)을 공유하며 공동 작업을 한다. 자원 공유를 통해 응답성과 경제성을 높일 수 있지만 이에 따른 문제도 발생할 수 있다. 공유 자원을 동시에 여러 스레드가 접근한다면 어떤 문제가 일어날까? 2개 이상의 스레드가 공유 자원에 접근할 경우 그곳의 데이터는 온전하지 않을 수 있다. 따라서 Critical Section을 설정하여 두 개 이상의 스레드가 동시 접근을 할 수 없도록 막아야 한다. 이와 같은 동기화 문제의 해결 방법에 대해 알아보자. 책을 참고하였습니다..
Multi-Process VS Multi-Thread 이전까지 프로세스와 스레드에 대해 알아보았다. 운영체제 입장에서 작업의 단위는 프로세스이고 CPU 입장에서의 작업 단위는 스레드이다. 이번 포스팅을 통해 멀티 프로세스와 멀티 스레드의 기능 및 차이점을 알아보고, 관련 용어들을 알아보려고 한다. 책을 참고하였습니다.용어정리1. 멀티 프로그래밍컴퓨터 시스템에서 실행 또는 대기 중인 프로세스들이 있다. 이들은 차례를 기다리며 CPU를 할당받고 처리가 되어진다. 시분할(Time-Sharing)에 의해 차례가 종료되어 다시 Ready Queue에 들어가거나, I/O 작업 처리가 필요해 Block(Waiting) Queue에 들어가기도 한다. 이처럼 운영체제는 여러 작업들을 빠르게 처리하며 CPU가 낭비되지 않도록 적절히 Context Switching을 하며 성..
Thread란 지난 process의 정리에 이어서 스레드에 대해 정리해보려고 한다. 프로세스는 실행 중인 프로그램으로, 원초적으로 단일 스레드 프로세스를 말한다. 프로세스와 프로세스끼리는 약하게 연결이 돼있지만, 스레드와 스레드 사이에는 메모리를 공유하기 때문에 강하게 연결되어 있다. 예전에는 스레드라는 개념이 없었다. 프로세스의 개념만 존재했고, 단일 스레드를 가진 프로세스이므로 굳이 스레드라는 용어 자체가 필요하지 않았다. 하지만 오늘날 기술의 발전으로 인해 다중 코어를 가진 CPU가 생겨나 스레드를 생성해 멀티 쓰레딩 작업이 가능해지면서 시스템의 효율을 높일 수 있었다. 책을 참고하였습니다. Thread 위 그림처럼 하나의 프로세스는 여러 개의 쓰레드로 구성될 수 있고, 프로세스 내의 스레드는 서로 강하게 연결되..
정적 팩토리 메서드(Static Factory Method) 패스트 캠퍼스의 강의를 듣던 중 정적 팩토리 메서드를 사용하는 상황을 보았다. 처음 보는 객체 생성 방식이길래 찾아보던 중 이것이 정적 팩토리 메서드라는 것을 알게 되었고, 관련 내용을 찾아보던 중 이펙티브 자바라는 책을 알게 되었다. 조슈아 블로크의 Effective Java에서 첫 번째 아이템으로 '생성자 대신 정적 팩토리 메서드를 고려하라'는 주제를 내놓았다. 정적 팩토리 메서드가 과연 무엇이고, 왜 써야 할까? Static Factory Method에 관해 다양한 블로그와 강의 영상이 있지만, 인프런에서 백기선 강사님의 를 참고하였습니다. Static Factory Method 정적 팩토리 메서드는 객체 생성 역할을 하는 클래스 메서드로 생성자(Contstructor)를 통해서가 아닌 Static..
[Sorting] 퀵 정렬 저번 포스팅에서는 분할 정복 알고리즘을 사용한 Merge Sort에 대해 알아보았다. 최악과 최선 모두 O(nlogn)의 시간 복잡도를 가지고 있어 데이터의 양이 많아도 항상 일정한 속도를 유지할 수 있다. Quick Sort 역시 분할 정복 알고리즘을 활용한 정렬방법이다. 나누는 기준점에 따라 최악의 경우 O(n^2)이 걸리기도 하지만 보통 O(nlogn)의 시간이 걸린다. 그럼에도 불구하고 퀵 정렬은 높은 효율을 보인다. 더 깊이 알아보도록 하자. Quick Sort 데이터 집합에서 하나의 Pivot(기준점 데이터)을 잡는다. 왼쪽에는 Pivot보다 작은 값을, 오른쪽에는 Pivot보다 큰 값들로 나누어 분리한다. 분리가 되었다면 Pivot의 데이터는 자신의 위치를 찾게 된다. 이후 다시 정렬이 안된..
[Sorting] 병합정렬 지난 포스팅(버블, 선택, 삽입 정렬)에 이어 오늘은 Merge Sort에 대해 알아보려고 한다. Merge Sort는 분할정복 알고리즘 중 하나로 최소 단위로 쪼개고 병합하는 과정에서 정렬이 이루어진다. Merge Sort의 시간복잡도의 경우 최악, 평균, 최선 모두 O(nlogn)의 시간복잡도를 가진다. Merge Sort 병합정렬로 최소단위까지 나눈 후 다시 결합시키면서 정렬해 가는 알고리즘으로 Merge Sort는 분할정복 알고리즘을 사용한 정렬방법이다. Not In Place Sorting : 추가적인 메모리 공간이 필요하므로 제자리 정렬이 아니다. Stable Sorting : 중복된 데이터를 순서대로 정렬 정렬 과정 데이터 집합을 N/2씩 최소 단위가 될 때까지 나눈다.(마지막 2개에서 1개..
JVM 구조 JAVA는 OS와 상관없이 Window, Linux, MacOS 등 어디에서든 실행할 수 있다. C언어와 다르게 자바는 JVM위에서 실행되므로 OS를 가리지 않는 것이다. 다만 OS에 맞는 JVM을 별도로 설치해줘야 한다. 따라서 우리는 플랫폼에 상관없이 하나의 자바 소스와 자바 컴파일러를 통해 코드를 실행할 수 있게 되었다. JVM(Java Virtual Machine) 자바 가상머신이라고 불리며 자바와 운영체제 사이에서 중개해주는 역할을 하며, 자바 언어가 CPU나 운영체제에 구애받지 않고 실행될 수 있도록 도움을 준다. Java source : 사용자가 작성한 자바 코드 Java Compiler : 기계가 읽을 수 있도록 해석하여 Byte Code로 변환 Class File : 자바 컴파일러에 의해..
[Sorting] 버블정렬, 선택정렬, 삽입정렬 정렬은 데이터의 집합을 특정 기준을 두고 우선 순위에 맞게 데이터를 저장하는 것이다. 대표적인 예로 오름차순과 내림차순이 있다. 정렬에도 다양한 알고리즘이 있지만 오늘은 정렬하는데 O(n^2)의 시간이 필요한 Bubble, Selection, Insertion Sorting에 알아보려고 한다. Bubble Sorting 버블 정렬은 서로 인접한 두 데이터를 비교하고 조건에 맞지 않으면 두 데이터의 위치를 바꾼다. 그러면서 모든 데이터들이 조건에 맞는 위치에 찾아가게 된다. In-place Sorting(제자리 정렬) - 추가적인 메모리 공간을 필요로 하지 않음 Stable Sorting(안정 정렬) 정렬과정 화살표는 현재 비교하려는 데이터이고 항상 자신의 오른쪽 데이터와 비교를 한다. 따라서 화살표가 가..