코드스피츠73 part5

BLOCK, NONBLOCK

FLOW IS BLOCKING

프로그램이 실행되면 도중에 멈춰지지 않고 끝까지 실행됨


for(const i of (function*(){
    let i = 0;
	while(true) yield i++;
	})()) console.log(i);


//script timeout
//플랫폼 안정성을 위해 강제 종료 시킴
//스크립트가 5초 정도를 허용시킴

BLOCKING FUNCTION

점유하는 시간 만큼 블록을 일으키는 함수


const f = v->{
	let i=0;
	while(i++ < v);
	return i;
};

f(10);
f(10000000000000);

  • 배열순회, 정렬-배열크기에따라
  • DOM순회-DOM의하위구조에따라
  • 이미지프로세싱-이미지크기에따라
BLOCKING EVASION

독점적인 cpu 점유로 인해 모든 동작이 정지됨

타임아웃체크에 의해 프로그램이 강제 중단됨

블록킹의 조합을 예측할 수 없음


const f = v->other(some(v), v * 2);
f(10);

칸텍스트 스위칭 - 시분황 운영체제의 동시 실행

하나의 프로세스에 여러 쓰레드를 사용해서 동시 실행한다.

time slicing


const looper =(n, f)=>{
	for(let i = 0; i < n; i++) 
		f(i);
};

looper(10, console.log);
looper(10000, console.log);


time slicing manual


const looper =(n, f, slice = 3)=>{
	let limit = 0, i = 0;
		const runner=_=>{
			while(i < n){
				if(limit++ < slice) f(i++);
				else{
					limit = 0;
					requestAnimationFrame(runner);
					break;
					}
			}
		};
		requestAnimationFrame(runner);
};

looper(12, console.log);

시간 기준으로 자동화 시킴

time slicing auto


const looper =(n, f, ms = 5000, i = 0)=>{
	let old = performance.now(), curr; 
	const runner=_=>{
		while(i < n){
			curr = performance.now();
			if(curr -old < ms) 
				f(i++);
			else{
				old = curr;
				requestAnimationFrame(runner);
				break;
			}
		}
	};
	requestAnimationFrame(runner);
};


worker thread pattern

web worker


const backRun = (f, end, ...arg)=>{
	const blob = new Blob([`
		onmessage =e=>postMessage((${f})(e.data));
	`], {type:'text/javascript'});
	const url = URL.createObjectURL(blob);
	const worker = new Worker(url);
	worker.onmessage =e=>end(e.data);
	worker.onerror =e=>end(null);
	worker.postMessage(arg);
};

backRun(v=>v[0] + v[1], console.log, 3, 5);

1시간 6분 까지 들음

진짜 명강의 ㅜㅜ

참조