코루틴(coroutines)
코루틴은 쓰레드(thread)와 비슷한 개념으로 하나의 실행 흐름이라고 할 수 있다.
코루틴은 자신만의 스택을 가지고 있고, 자신만의 지역 변수를 가지며, instruction point를 갖는다.
하지만 다른 코루틴들과 전역 변수를 공유한다.
코루틴과 쓰레드의 차이점은 쓰레드는 동시에 여러 개가 수행될 수 있는 반면 코루틴은 동시에 하나밖에 수행되지 않는다는 것이다.
다른 코루틴을 수행하기 위해서는 현재 수행중인 코루틴이 suspend된 다음 새로운 코루틴을 수행해야 한다.
코루틴은 마치 예전 OS의 비선점형(non-preemptive) 쓰레드와 비슷하게 동작한다.
프로그래머가 강제로 컨텍스트 스위칭 명령(루아에서는 coroutine.yield함수를 사용한다.)을 내려주어야만 스위칭이 이루어진다.
http://blog.naver.com/kimsk99?Redirect=Log&logNo=50002970193
클로저(closure)
함수 안에 함수를 정의하는 중첩 함수(nested function)의 개념은 어렵지 않지만,
클로저는 중첩 함수에 대한 단순 함수 포인터만은 아니다.
sayHello() 함수에서 text는 지역 변수이므로 스택에 할당하는 구조를 따른다면 sayHello() 함수가 리턴된 후에는 더 이상 text 변수의 값을 읽을 수 없어야 한다.
자바스크립트에서 function() { alert(text); } 같이 클로저를 선언하면 클로저 내부에서 참조하는 지역 변수인
text를 마치 힙에 할당한 것처럼 보존한다.(즉 클로저에 대한 감춰진 포인터가 하나 더 있는 셈이다.)
따라서 sayHello() 함수가 리턴된 후에도 클로저를 호출했을 때 text 변수의 값을 읽을 수 있는 것이다.
http://skyul.tistory.com/155
날짜: 2007-06-04 16:12:41,
조회수: 4430 |