티스토리 뷰

concurrency.key
17.77MB

회사에서 발표했던 자료 😎

 

 

시연한 예제 코드

generator

// feature1 ) pause - resume
function* sampleGen(){
	console.log('함수를 시작합니다')
	x = yield 1;
	console.log(`여기서부터 함수를 다시 시작해요. input = ${x}`)
	y = yield 2;
	console.log(`다시 시작~ ${y}`)
}

const gen1 = sampleGen()
gen1.next()
gen1.next(5)
gen1.next(6)


// feature2 ) iterator
function* sampleGen2(){
	for (let i=1; i<=5; i++){
		yield i;
	}
}
for(const v of sampleGen2()) {
  console.log(v);
}


// 무한 sequence도 가능
function* infinite() {
  let index = 0;

  while (true) {
    yield index++;
  }
}
const gen2 = infinite();
gen2.next()

 

generator ---(stop&resume이 가능하다는 특징을 develop) --->

    coroutine (지역 변수 및 pc 값을 저장할 수 있는 초경량 실행 유닛) --->

        async/await syntax (사용성 좋게 wrapping 한 동시성 라이브러리(or 언어 native) syntax)

 

promise

async function longTimeConsumingApiCall(){
 return new Promise((resolve, reject) => {
  setTimeout( function() {
    resolve("query result~!")
  }, 3000)})
}

// 1)
async function main(){
  console.log('start')
  result = await longTimeConsumingApiCall()
  console.log('fin')
  return result
}

main()
console.log('waiting...')


// 2)
async function main2(){
  console.log('start')
  const p = longTimeConsumingApiCall()
  console.log('fin')
  return p
}

p = main2()

 

참고 자료

golang runtime scheduler 

https://medium.com/@ankur_anand/illustrated-tales-of-go-runtime-scheduler-74809ef6d19b

https://medium.com/a-journey-with-go/go-goroutine-and-preemption-d6bc2aa2f4b7

 ㄴ go runtime scheduler는 preemptive + cooperative이 혼합된 방식으로 고루틴과 native thread를 n:m 매핑해준다는 내용의 블로그 글...

 

concurrency-ruby guide

http://ruby-concurrency.github.io/concurrent-ruby/master/file.promises.out.html

 

 

댓글
공지사항
최근에 올라온 글