230210(금)
🎄 성장일지 3.1
책 행복한 이기주의자(웨인 다이어)
의 내용에 자극받아 시작하는 소박한 성장기록
살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!
🌳 키워드 (1.0)<br/> 최대한 간단하게 정리, 추후에 보면서 스스로 설명<br/> 🍉 경험 위주로 (2.0)<br/> 단순 정보를 전달하기보다 무엇을 배웠고 어떻게 해결했는지 짧고 간단하게 작성<br/> ❄️ 정해진 템플릿에 맞춰서 (3.0)<br/> 키워드, 경험 모두 좋다. 다만 매일 작성하기로 마음 먹은만큼 핵심만 간결하게 정리할 수 있게 템플릿을 작성 (3.1) 230102부터 시작되는 학습에 관한 내용 추가
🔑 오늘의 키워드
동기화
- 프로세스 또는 스레드들이 수행되는 시점을 맞추고 서로 알고 있는 정보가 일치하게 하는 것
- 크게 순서 개념의 동기화가 있고 공유 자원에 한번에 하나만 접근하게 하는 개념의 동기화가 있다.
- 동기화 방법은 크게 뮤텍스, 세마포어, 모니터 등이 있다.
비동기 입력
- 비동기적으로 입력을 받는 것으로 적절한 함수를 호출하여 커널에 I/O 요청을 보낸다.
- 커널에서 요청을 수락하면 호출 스레드는 커널이 I/O 작업이 완료되었음을 스레드에 알릴 때까지 다른 작업을 계속 처리한다.
- 알림이 오게 되면 현재 작업을 중단하고 필요에 따라 I/O 작업에서 데이터를 처리한다.
멀티 스레드
- 여러개의 스레드로 프로세스를 동시에 실행하는 것
- 기존의 싱글 스레드(blocking)에서 멀티 스레드(non-blocking)으로 넘어가며 병렬처리가 가능해졌다.
비동기
- 동기가 아닌 것(asynchronous)
non-blocking
으로 테스크를 수행한다.- 병렬적으로 테스크를 수행한다.
- 요청과 결과가 동시에 일어나지 않는다.(요청한 그 자리에서 결과가 주어지지 않는다.)
- 결과가 주어지는 데 시간이 걸리더라도 그동안 다른 작업이 가능하다.
- 동기보다 직관적으로 이해하기 어렵다.(설계가 힘들다.)
- blocking 다음 non-blocking 다음으로 등장한 방법
- 동시에 일어나지 않는다는 의미인데, 이 때의 동시란 요청과 반환이 동시에 일어나지 않는다는 의미이다.
node.js의 event emitter
- web에는 이벤트 리스너가 있듯이, nodejs에서 이벤트를 발생시키는 방법이자 클래스
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); // 이벤트 이름과 그 이벤트 호출 시 불러올 콜백 함수를 전달한다. eventEmitter.on('start', () => { console.log('started'); }); // start라는 이벤트를 발생시킨다. eventEmitter.emit('start');
- 이런 eventEmitter는 단일 스레드인 nodejs가 비동기 처리를 하는데 핵심적인 요소로 작용한다.
- 대부분의 nodejs의 비동기 api들이 eventEmitter를 상속하고 있다.(공식문서 참고)
참고자료
- 책
혼자 공부하는 컴퓨터 구조 + 운영체제
- nodejs 공식문서 - event emitter
📝 요약 및 하루 간단 회고
미션은 여전히 감이 안잡히지만, 나름 그동안 공부한 것들과 해온 미션들을 정리했더니 머리가 개운해졌다. 앞으로 어떤 걸 더 중점적으로 다시 시도하고 연습해야할지 명확해진듯해서 기분이 좋다.<br/> 아 그리고 비동기... 하 뭔가 알겠는데, 또 보면 헷갈리고 참... 계속 습관적으로 사용하면서 손에 익을 수 있도록 해야겠다. 또 하면 다 된다.
오늘의 잘한 점
- 그동안 미션 정리를 통해 머리 맑게 한 점
- 비동기 다시 공부하면서 이해한 점
- 미션 1 라운드 로빈으로라도 일단 구현한 점
- 금요일임에도 마음 흔들리지 않고 하루 열심히 보낸 점!!!(진짜 뿌듯)
오늘의 아쉬운 점
- 알고리즘 학습 계획... 얼른 세우자!
undefined