2009-05-02 1 views
3

Continuation의 개념을 이해하는 데 어려움을 겪고 있습니다 (Smalltalk가 적용된 Seaside에서 사용됨). 위키 백과에서 조각은 말한다 : Continuation (스몰 토크에서와 같이)과 인터럽트 (어셈블러에서와 같이)의 차이점은 무엇입니까?

"... 프로그래밍 언어를 어느 시점에서 실행 상태를 저장하고 나중에에서 그 시점으로 돌아 할 수있는 기능을 제공 구조입니다 일류 연속 요청을 참조

프로그램에서 ... "

인터럽트를 프로그래밍 할 때 어셈블러 프로그래머가 무엇을 할 것인지를 표현하는 단순히 다른 방법이 아닙니까? 아니면 나는 완전히 그 요점을 놓쳤다!

답변

11

연속은 실행중인 프로세스의 스냅 샷 복사본으로 볼 수 있습니다. 연속을 캡처하면 현재 프로세스가 복사되어 따로 보관됩니다. 그 후 코드는 계속 정상적으로 실행됩니다. 연속성 평가는 현재 프로세스가 종료되고 복사 된 상태가 캡처 된 상태로 다시 시작됨을 의미합니다. 연속은 일반적으로 여러 번 다시 시작될 수 있습니다.

인터럽트는 서로 인터리브하는 두 개의 다른 실행 스레드 (응용 프로그램 코드, 인터럽트 처리기)가있는 coroutine과 비슷합니다.

+0

연속의 아주 명확한 설명. –

1

몇 가지면에서 유사합니다. 그러나 연속은 프로그램 자체에서 호출되며 인터럽트는 대개 CPU 또는 컴퓨터의 장치에서 생성됩니다. 또한 인터럽트는 C 신호와 비슷하며 방금 호출되어 제어가 프로그램으로 돌아갑니다. 인터럽트는 상태를 저장하고 나중에 복원하는 일을 담당합니다.

또한, 어셈블러에서 매우 쉽게 연속을 구현할 수 있습니다.

2

계속은 C의 setjump/longjump와 동일합니다. 연속 (스택, 플래그, 레지스터, 명령어 포인터 등)을 종료 한 후에 컨텍스트를 그대로 유지할 수 있습니다. 따라서 핸들러가 끝나고 계속이 암시 적으로 처리되지 않으면 반환 할 필요가 없다는 (또는 더 정확하게는 연속을 호출 할 필요가 없다) 것을 제외하고는 소프트웨어 인터럽트 호출과 비슷합니다.

+0

더 높은 언어로 GOTO가 들리는가요? 그들은 (계속) 좋은 습관입니까? GOTO가 모든 종류의 구조적 문제를 야기 할 수 있기 때문에 나는 묻는다. 감사합니다 Kevin – KHWP

+2

사실, 대부분의 경우 코드를 작성하기가 더 어렵다는 점에서 goto와 비슷합니다. 그들은 명령형 언어와 같이 유효하지 않은 문맥으로 뛰어든다는 문제가 없습니다. 레이블과 달리 컨텍스트를 실제로 초기화하기 전에 연속을 만들 수 없습니다. – artificialidiot

관련 문제