페이지

Include Lists

2017년 1월 19일 목요일

동기/동기화/비동기(Synchronous / Asynchronous)


 What
   - 동기/비동기/동기화에 대한 용어 정리

 Why
   - Multi Thread, Parallel processing을 하기 위한 기본적으로 알아둬야하는 개념

 Usage
   - ppl.h 참조



AAL를 알아가기 앞서, 동기/비동기/동기화 등의

용어 정리를 할 필요가 있어서 남겨둔다.


동기화 : 다른 두시간을 하나로 합치는 행위

동기이미 동기화가 되어있다는 상태를 말함.
비동기 : 동기화가 되어 있지 않은 상태

즉, 보통 프로그래밍에서 동기 함수란 그 함수가 호출되고, 그 함수가 반환될 때까지 해당 컨텍스트가 진행되지 않고 기다리다가 반환되고 나서야 컨텍스트가 진행되는 함수를 말합니다. 이것은 사실 컨텍스트가 기다리는 것이 아니라, 해당 컨텍스트가 함수의 내용을 직접 처리하기 때문에 함수를 호출한 입장에서 보면 기다리는 것처럼 보이는 것입니다.

마찬가지로 비 동기 함수는 함수를 호출한 컨텍스트가 직접 함수의 내용을 처리하지 않고 새로운 작업 스레드를 생성하고 생성된 스레드의 컨텍스트가 진행되기 때문에 함수를 호출한 컨텍스트는 함수를 호출하자마자 함수의 반환을 받고, 계속해서 진행되는 것입니다. 함수를 호출한 컨텍스트는 이러한 비 동기 함수가 언제 실제로 종료될지 모르기 때문에 함수의 반환이 아닌 다른 기법이 필요합니다. 보통 폴링( polling )이나 메시지 또는 콜백 함수와 같은 기법을 사용하여 함수의 종료를 알 수 있습니다.


메시지 방식 : 메시지가 전달되면, 해당 메시지에 따라서 처리하는 방식
폴링 방식 : 상태를 주기적으로 체크하여, 상태에 따라서 처리하는 방식

Firmware
인터럽트 방식 : 현재 동작을 멈추고, 즉시 실행
폴링 : 주기적인 체크를 통해 실행, 현재 동작을 마치고 다음 동작시 체크하여 실행되는 방식





출처: <http://vsts2010.tistory.com/346