본문 바로가기

반응형

전체 글

(97)
실행컨텍스트 자바스크립트 중요 개념을 품은 실행컨텍스트. 먼저 두 줄 요약 하자면 순서 - 전역 코드 평가 => 실행 => 함수 코드 평가 => 실행 구성1. global lexical environment 1. Env.Record 가. object Env.Record => binding object 나. declarative Env.Record => 선언된 변수를 잡는다 (const, let, function) 2. Outer Lex.Env.Reference 3. Block Lex.Env 가. Env.Rec => declarative Env.Record 나. Outer Ref 구성2. function lexical envrinment 1. Env.Record 가. 내부의 변수 다. 매개변수 (arguments) A..
운영체제 1차시 비전공자의 아킬레스건.. CS지식의 부재. 이를 해소하기 위해 반효경 교수님의 운영체제 수업을 KOCW에서 찍먹 해본다. - 운영체제 강의는 14년도, 17년도 버전이 있으며 14년 버전이 비전공자에게 조금 더 수월하다고 한다 운영체제 개요 - 운영체제란 컴퓨터 하드웨어 바로 위에 설치, 하드웨어의 작동 원리를 몰라도 pc를 사용할 수 있는 것은 운영체제 덕분이다. - CPU, memory, HDD 등을 관리하는 가장 복잡하고 까다로운 소프트웨어인 동시에 사용자에게는 편리한 인터페이스를 제공해야 한다. - 동시에 사용하고 있는 사용자/프로그램에게 독자적인 환경에서 수행되는 것 같은 환상(illusion)을 제공한다. => 서버에 여러 사용자가 동시 접속해도 혼자 사용하는 듯한 경험을 제공 - 운영체제 중..
깊은 복사와 얕은 복사 primitive type은 깊은 복사가 일어난다. - 변수 A에 B를 할당하면, B의 값(문자열, 숫자, 불리언 등)을 그대로 복사한다. - 변수 A를 변경하여도 B에 영향을 미치지 않는다. reference type은 기본적으로 얕은 복사가 일어난다. - 변수 B에 객체 A를 할당하면, B에는 A를 참조하는 메모리 주소를 복사한다. - 따라서 B의 속성을 변경하면 A도 변경된다. - 깊은 복사가 필요한 경우 스프레드 오퍼레이터 `...`을 붙여서 메모리 주소가 아닌 힙에 있는 데이터 자체를 복사해 올 수 있다.
node.js와 스레드, non-blocking I/O Node.js는 기본적으로 싱글스레드다. Node.js를 구성하는 libuv라이브러리가 스레드 풀을 제공하는 것처럼 보이지만, 실제로 사용하는 애플리케이션은 한 개다. worker_threads 등장 (https://nodejs.org/api/worker_threads.html) Node.js는 CPU intensive한 작업에 취약하다 i/o intensive한 서비스에 적절한 한편, cpu intensive한 작업에 취약하다. 예를 들면, - 피보나치수열과 같은 복잡한 연산 - for(let i = 0; i
프로세스와 스레드 프로세스 : 프로그램이 돌아가고 있는 상태, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위 현재 실행 중인 프로세스로 브라우저가 있다고 가정한다. 유튜브에 접속해서 영상을 시청한다. 이때 유튜브 영상을 받는 동시에 영상도 함께 재생해야 하는데, 이렇게 여러가지 작업을 동시에 진행할 수 있는 것은 다수의 스레드가 흐르기 때문이다. 프로세스는 컴퓨터의 자원을 분할해서 사용, 스레드는 프로세스에 주어진 자원을 공유하며 작업한다. 단, 같은 변수에 다수의 프로세스가 동시에 접근하는 경우 에러가 발생할 수 있다. 참조 : ttps://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html [OS] 프로세스와 스레드..
가비지 컬렉션 - 마크앤 스윕 래퍼런스 카운트는 순환참조의 오류를 해결하지 못함. 따라서 일정 주기, 메모리의 사용량에 따라 마크앤 스윕을 실행해서 가비지 컬렉션을 보완 => 변수 선언 후 출처와 연결해준다. => 출처를 연결한 그래프를 순회한다. => 루트 출처와 연결이 끊긴 객체는 지워버린다.(스윕) => 우측 하단과 같이 순환참조하는 객체를 가비지로 인식하고 스윕해준다. => 주의! 선언한 객체 전체를 순회하기 때문에 무거운 작업이다. 참조 : https://www.youtube.com/watch?v=tTH4WdpRC2k
가비지 컬렉션 - 레퍼런스 카운팅 자바스크립트는 프로그래머가 직접 메모리를 관리하지 않는다. 사용이 끝난 객체를 가비지 컬렉터가 자동으로 메모리에서 지워주기 때문이다. 작동방식은 레퍼런스 카운팅, 마크앤 스윕 등이 있다. 래퍼런스 카운팅의 작동방식. => 객체마다 래퍼런스 카운트 부여하고 계산하는 방식이다. => 더 이상 참조하는 곳이 없는 변수는 가비지 컬렉션의 대상이 된다. (래퍼런스 카운드 == 0) => 주의! 우측하단과 같이 순환참조가 일어나는 경우 래퍼런스 카운트가 0이 될 수 없음으로 (더이상 접근하지 않지만)가비지 컬렉션이 발생하지 않는다. 참조 : https://www.youtube.com/watch?v=j9Vncn04GsE
자바스크립트 중요 개념 자바스크립트는 런타임에 타입이 결정되는 동적 언어이면서 함수의 선언 위치에 따라 스코프를 결정하는 정적(렉시컬) 스코프를 갖는다. 데이터 타입 - primitive(immutable) type = value => 숫자, 문자열, 불리언, null, undefiend, symbol - reference(mutable) type = reference => array, date, regexp, map, weakMap, set, weakSet *immutable = 스스로 값을 바꿀 수 없음 밸류와 레퍼런스의 차이 call by value = 참조하는 값을 가져온다. call by reference = 참조하는 주소를 가져온다. a1 = [1,2]와 a2 = [1,2]가 있을때 a1 !== a2이다. a1과 a..

반응형