YeonjuOHYE / javascript

0 stars 0 forks source link

유돈노 #part2-2#1) 비동기성:지금과 나중 #21

Open YeonjuOHYE opened 4 years ago

YeonjuOHYE commented 4 years ago

비동기성 콜백만 알면되나...?

1.1 프로그램 덩이

프로그램은 파일 하나로 작성할 수 있지만 Chunk로 구성되는 것이 일반적 가장 일반적인 Chunk 는 함수.

가장 간단한 (최적이기도 한) 방법은 콜백 함수

1.1.1 비동기 콘솔

콘솔 I/O를 비동기로 돌리는 브라우저도 있기 때문에 console.log 의 값이 가끔 엉뚱하게 나올 때도 있긴 하다.

1.2 이벤트 루프

이벤트 루프 : 여러 프로그램 덩이를 시간에 따라 매 순간 한 번씩 엔진을 실행시키는 이벤트 루프

이벤트 스케쥴링하는 일은 언제나 엔진을 감싸고 있는 주위 환경의 몫 ex) Ajax, setTimeout

setTimeout()은 콜백을 이벤트 루프 큐에 넣지 않는다. setTimeout은 타이머를 설정하는 함수. 타이머가 끝나면 환경이 콜백을 이벤트 루프에 삽입

1.3 병렬 스레딩

자바스크립트는 절대로 스레드 간에 데이터를 공유하는 법이 없으므로 비결정의 수준은 문제가 되지 않는다.

1.3.1 완전 실행

자바스크립트의 작동 모드는 단일-스레드 이므로 내부의 코드는 원자적 ex) foo(), bar() 실행하면 foo가 실행된 후 bar가 실행

경함 조건 : 힘수의 순서에 따른 비결정성

1.4 동시성

동시성은 처리 수준 병행성과 상반되는 개념의 프로세스 수준의 병행성 프로세스 작업이 병렬로 진행되는 지와 상관없이 동시에 진행되는가 ex) onsroll시 데이터르 더 받아오는 작업은 1.onScroll 프로세스 2.ajax 두 부분의 프로세스로

1.4.3 협동적 동시성

협동적 동시성 : 실행 시간이 오래 걸리는 프로세스를 여러 단계/배치로 쪼개어 다른 동시 프로세스를 여러 단계/배치로 쪼개어 다른 동시 프로세스가 각자 작업을 이벤트 루프 큐에 인터러링 하도록 하는 게 목표 => 즉 이벤트 큐를 독점하지 않도록

1.5 잡

es6 부터 이벤트 루프에 새롭게 도입된 개념 잡큐는 이벤트 루프 큐에서 모든 틱의 끝에 부착되어 있는 큐 틱이란) 이벤트 루프에서 이벤트 빼서 실행하는 반복 행위를 틱이라 한다.

이것을 이용하면 (프로미스에서 거의 이용) 나중에 할 작업인데 다른 어떤 작업보다 우선하여 바로 처리 setTimeout(0)과 비슷한 hack!!

1.6 문 문의 순서는 브라우저에서 최적화하여 순서를 바꿀 수도 있으므로 보장된 것이 아니다.