분류 전체보기(52)
-
Reactor 패턴
운영체제에서도 나오지만, I/O 작업은 느리다. 그리고 사용자의 이벤트에 따라 발생하기 때문에 종료시점을 파악하기도 까다롭다. 전통적인 블로킹 I/O 방식은 동기적으로 동작한다. 블로킹 I/O를 사용하여 구현된 웹 서버는 동일한 스레드에서 여러 연결을 처리할 수 없게 된다. 각 소켓에서 모든 I/O 작업이 다른 연결 처리를 차단할 것이기 때문이다. 이러한 이유로 웹 서버에서 동시성을 처리하기 위한 전통적인 접근 방식은 처리해야 하는 각각의 동시 연결에 대해 새로운 스레드또는 프로세스를 시작하거나 풀에서 가져온 스레드를 재사용하는 것이다. 이렇게 하면 I/O 작업으로 스레드가 차단되어도 분리된 스레드에서 처리되므로 다른 요청의 가용성에는 영향을 미치지 않는다. 그러나 이 경우, '유휴상태'시점에서 유지되어..
2020.02.09 -
Map, Set Collection, WeakMap, WeakSet Collection
ES2015 기준 "use strict" const profiles = new Map(); profiles.set('twitter', '@adalovelace'); profiles.set('facebook', 'adalovelace'); profiles.set('googleplus', 'ada'); profiles.size; // 3 profiles.has('twitter'); // true profiles.get('twitter'); // "@adalovelace" profiles.has('youtube'); // false profiles.delete('facebook'); profiles.has('facebook'); // false profiles.get('facebook'); // undefin..
2020.02.09 -
Node.js의 철학
1. 경량 코어 : 코어는 최소로, 추가 모듈은 생태계에 2. 경량 모듈 : 작은 것이 아름답다, 각 프로그램이 각기 한 가지 역할을 잘 하도록 만든다 => 이해하기 쉽고, 사용하기 쉽다. 테스트 및 유지보수가 훨씬 간단하다. 브라우저와 완벽한 공유가 가능하다. 3. 작은 외부 인터페이스 : 모듈의 정의는 경량화를 목적으로, 가장 일반적인 패턴은 함수나 생성자와 같이 하나의 핵심 기능을 표현하는 동시에, 더 많은 고급 기능이나 보조 기능은 노출된 함수나 생성자의 속성이 되도록 하는 것. 이렇게 모듈의 크기와 범위가 작고 최소한의 기능을 노출하는 특성을 달성하려고 하면 API의 유용성 역시 향상된다. 보다 명확해지고 잘못된 사용에 덜 노출되는 결과를 얻을 수 있다.
2020.02.09 -
자바스크립트 객체와 비구조화 할당
자바스크립트의 객체를 표현할 때는 JSON을 많이 활용한다. JSON은 이름 그대로 JavaScript Object Notation이다. 자바스크립트에서 객체를 만들 때 사용하는 표현식으로, 이해하기 편하고 용량이 작다. JSON은 데이터 포맷일 뿐이며 단순히 데이터를 표시하는 표현방법이다. const hero = { name: "superman", gender: "man", age: 20 } // ${hero.name} : "superman" 이런식으로 사용한다 name-value 형식의 쌍으로 이뤄지며, name-value에서 value는 Array로도 사용할 수 있다. 이 때에는 데이터를 대괄호 안에 넣고 쉼표로 구분짓는다. 이러한 객체를 표현하는 JSON 형태는 비구조화 할당이 가능한데, ES6에..
2020.01.26 -
인터럽트 (interrupt)
인터럽트란? CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술 가령 선점형 스케쥴러를 구현할 때, 프로세스 running중에 스케쥴러가 이를 중단시키기 위해서는 스케쥴러 코드가 실행되어야함, 이 때 스케쥴러 코드가 실행되어야 한다는 것을 cpu에 알리는 것이 인터럽트의 역할. 또한 IO Device를 이용하면서 프로세스가 blocking 상태였다가 IO 사용이 끝난뒤에 다시 ready 상태로 돌아가야할 때에도 IO Device를 체크하여 CPU에게 알리는 것 또한 인터럽트의 역할 즉, 인터럽트는 예외 상황을 핸들링 하는 것, CPU가 프로그램을 실행하는 도중에 입출력 하드웨어 등의 장치나 또는 예외상황이 발생할..
2020.01.26 -
선점형과 비선점형 스케쥴러
선점형 스케쥴러 (Preemptive Scheduling) :하나의 프로세스가 다른 프로세스 대신에 프로세서를 차지할 수 있음 비선점형 스케쥴러 (Non-preemptive Scheduling) :하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음 선점형과 비선점형의 차이 비선점형은 프로세스가 자발적으로 blocking상태로 들어가거나 실행이 끝났을 때만 다른 프로세스로 교체가 가능하다. 그러나 선점형 프로세스는 running중에도 스케쥴러가 이를 중단시키고 다른 프로세스로 교체가 가능하다. 스케쥴러 알고리즘 중에 FIFO, SJF, Priority-based 등은 어떤 프로세스를 먼저 실행시킬지에 대한 것이며 RoundRobin은 시분할을 위한 기본 알고리즘으로, 시분할은 선점형 ..
2020.01.26