티스토리 뷰
회사에서 발표했던 자료 😎
시연한 예제 코드
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
'시리즈 > Concurrency' 카테고리의 다른 글
파이썬 비동기 프로그래밍 (0) | 2022.03.09 |
---|---|
웹서버 request 처리 전략 : threaded vs evented (0) | 2022.02.03 |
[문서정리] I/O Bound 서버를 스케일링 하기 위한 리액터 패턴 (0) | 2022.02.02 |
[문서정리] 루비로 동시성 모델 소개하기 Part II (0) | 2022.01.31 |
[문서정리] 루비로 동시성 모델 소개하기 Part I (0) | 2022.01.30 |
댓글
공지사항
최근에 올라온 글