본문 바로가기

Archive

[코드스피츠 87, 88] 위임된 속성 & async await

반응형

✔️코드스피츠 87 - JS의 위임된 속성 (Delegated Property)

 

*Property

은닉과 캡슐화되어있는 것

 

*Property to Object --> delegate

 

 

✔️코드스피츠 88 - async await #1/2

 

*Sync Flow

메모리에 적재된 명령이 순차적으로 실행됨

 

*Sync Flow Control

Goto를 통해 명령의 위치를 이동함

 

*Sub Flow

함수 등을 통해 별도의 명령 셋을 여러 번 실행함

 

(예제)

function : 반복 사용할 수 있다. (sub flow에 속함)

promise : 한번 사용되면 파기되고 다시 만들어야 함 (sub flow가 아님)

 

*Blocking

Sync Flow가 실행되는 동안 ㅏ른 일을 할 수 없는 현상

멀티태스킹 불가능 (노이만 머신)

 

-블로킹 줄이는 방법?

sync flow를 짧게 하기! --> 하지만 실질적으로 불가능

다른 쓰레드에 syncflow를 떠넘기기

다른 쓰레드의 작업이 완료되면 원래 스레드에 보고해야 함 --> 동시성 문제 발생

 

*Non Blocking

Sync Flow가 납득할 만한 시간 내에 종료되는 것

 

*Sync

서브루틴이 즉시 값을 반환함

*Async

서브루틴이 다른 수단으로 값을 반환함

 

-다른수단?? --> Promise / callback function / iterations

 

-Async 단점

호출 결과가 즉시 반환되지  않으므로 현재의 sync flow가 종료됨

그 결과 현재의 어휘 공간에 내의 상태를 결과 시점에 사용할 수 없음

(=async 동작 사이의 변수들은 다 사라짐)

요청 시의 상태를 별도로 결과시점에 전달할 부가장치 필요

 

-Sync의 장점 + Async의 장점

sync로직으로 async를 사용할 수 있게 함

하지만 sync flow가 어긋나므로 이전 sync flow의 상태를 기억하며 이어 줄 장치 필요

상태를 기억하고 이어주는 장치 (Continuation)

이를 활용하는 프로그래밍 스타일 (Continuation Passing Style : CPS)

 

-JS에서 CPS가 중점적으로 사용되는 부분

Generator, Async, Asynchrous Iterators

 

 

✔️코드스피츠 88 - async await #2/2

 

*Async & Promise

Promise는 ES6부터 JS 표준 객체로 지원

promise.then() 의미?

 

*Async & await

동시적 병렬 실행?

suspend 기능을 가지고 있음

async await는 직렬만 수행할 수 있음???

 

await timeout(f1, 500) 

--> 0.5만큼 지난 뒤 함수를 실행하겠다.

// await는 Promise 앞에서만 동작한다. timeout은 promise 반환!

 

promise.then

Promise.all : 각각 task를 병렬 수행함

Promise.race : 짧은 task를 찾아서 수행함 / 코드에 뒷정리가 필요함..

--> timeout이 지원되는 fetch 함수 사용

 

async 무조건 promise !! 

반응형

'Archive' 카테고리의 다른 글

Next.js의 역할과 써야 하는 이유  (0) 2022.02.03
[코드스피츠 78] ES6+함수와 OOP  (0) 2020.10.25
[코드스피츠 77] ES6+ 기초 편  (0) 2020.10.24