SlideShare a Scribd company logo
1 of 22
Download to read offline
Asynchronous Agents
Library
(AAL)
김현우 Next Institute
데이터의 흐름(dataflow)
• 기존의 병렬화 방식(동시실행지원 컨테이너,병렬가능 반복구문도 포
함해서)
-> 각각의 코드 조각을 여러 개의 스레드에서 실행되게 하는 것에 매
우 효율적이다.
• 하지만 병렬처리의 속도에 영향을 주는 가장 큰 영향을 주는 대기시
간(I/O 같은 것)에 대응 하기에 효율적인 것은 아니다.
• 결국 데이터의 흐름에 집중해볼 필요가 있다.
->데이터 흐름 중심 프로그래밍
Actor-Based Programming
• 하나의 어플리케이션을 병렬실행 가능한 여러 개의 독립된
부분(Actor)으로 나눈다.
• 각각의 Actor는 메시지(데이터를 총칭하는것) 를 주고 받으면서
결과를 만들어 낸다.
• 즉, 공유 데이터가 없다.
• 이런 방식으로 설계하다 보면 개발자들이 좀더 데이터 흐름을
중심으로 생각하면서 프로그래밍 할 수 있다.
-> 하지만 결국 똑같은 거 아닐까?
The Concurrency Runtime
• Scheduler와 Resource Manager
로 구성되어있다.
• Scheduler는 Resource Manager
로 부터 컴퓨터의 자원정보를 모
은다.
• 병렬실행 가능한 부분의 actor를
효율적으로 scheduling해서 실행
한다.
• 고수준에서 병렬 프로그래밍 할
수있게 추상화된 구조다.
https://msdn.
microsoft.com
/en-
us/library/ee2
07192.aspx
The Concurrency Runtime
https://msdn.
microsoft.com
/en-
us/library/ee2
07192.aspx
하지만 vs 2015 그 이상 에서는 테스크 클래스와 그 연관 클래스(ppltasks.h)를
스케줄링 하는데 Concurrency Runtime을 사용하지 않는다. 더 좋은 Windows ThreadPool
을 사용한다.->AAL도 포함인가?
AAL 구성요소 첫번째
Message-Passing Framework
Message-Passing Framework
• 여러 종류의 메시지 블록으로 구성된다.
• 각각의 메시지 블록은 메시지를 받고, 처리하고 전달하는 역할
을 한다.
• 이런 메시지 블록들을 연결해서 동작들이 파이프 라인처럼 작
동하게(순서대로 작동하게) 할 수 있다.
• 또한 각각의 메시지 블록은 병렬적으로 스케줄링 돼서 실행된
다.
https://msdn.microsoft.com/ko-kr/magazine/ff959205.aspx
ISource and ITarget.
• 각각의 메시지 블록은 메시지를 받고, 처리하고 보내는역할을
한다.
• Isource<Type>는 입력포트
• Itarget<Type>은 출력포트 라고 생각하면 된다.
• 각각의 메시지 블록역할에 따라 두타입을 을 상속받는다.
Concurrncy:: send/asend,receive/try_receive
• 각각의 블록으로 파이프 라인을 구성하면 큐처럼 작동하게 된
다.(대부분의 블록은 입력된 순서대로 처리하고 출력한다.)
• 각각의 send와 receive는 큐의 push 와 pop의 역할을 한다. 물
론 다음에 정리된내용을 보면 pop을 했을때 데이터가 지워질수
도 아닐수도 있다.
• asend/try_receive 는 비동기 방식 즉 보내기나 받기가 완료 되
었나를 확인하지 않고 바로 리턴 되는 함수들이다.
Message Blocks: unbounded_buffer<Type>
• 큐처럼 작용하는 메시지 블록
(push,pop)
• 개수의 제한은 정해져 있지 않다.
• 여러 개의 소스 로부터 받아올 수 있다.
• 여러 개의 타겟에 보낼 수 있다
• 하지만 큐처럼 사용되기 때문에
보통 하나의 타겟에 보내도록 사용된다.
https://msdn.microsoft.com/en-us/library/dd504833.aspx
Message Blocks: overwrite_buffer<Type>
• 앞의 unbounded_buffer와 유사.
• 하지만 한 개의 값만 저장.
• 계속 넣으면 덮어써진다.
• 또 다른 블록이나 에이전트에
전달을 해도 값이 없어지지않는다.
• 그래서 보통 하나의 소스로 부터
여러 개의 타겟으로 보내는데 사용
https://msdn.microsoft.com/en-us/library/dd504833.aspx
Message Blocks: single_assignment Class
• overwrite_buffer와 거의 유사
• 하지만 한번밖에 쓸수가 없다.
처음 값이 유지됨
https://msdn.microsoft.com/en-us/library/dd504833.aspx
Message Blocks: call<Type>
• 메시지를 받는다.
• 받은 메시지를 사용자가 지정한
작업을 수행한다.
• 람다,함수객체,함수자등을 사용
할수 있다.
• 다른 함수호출과 다른점은 입력
과 작업수행이 병렬적으로 스케
줄 된다는 것이다.
https://msdn.microsoft.com/en-us/library/dd504833.aspx
Message Blocks:transformer<Input,Output>
• 메시지를 받고 보낸다.
• Call과 비슷하게 어떤 작업을
수행할수 있다.
• 다른 블록들과 다르게 입력
타입과 출력 타입을 다르게
설정할수 있다.
https://msdn.microsoft.com/en-us/library/dd504833.aspx
Message Blocks:그 외
• 여러 개의 메시지를 하나의 메시지로묶어주는 블록
make_join(&tmbuf, &kbbuf);
(multitype_join 도 존재 서로다른타입을 받을수 있다.)
make_choice(&fib35, &fib37, &half_of_fib42);
• 다른 블록에 일정 시간간격 마다 메시지를 보낸다.
timer<wchar_t> progress_timer(100u, L'.', &print_character, true);
• 추가 참고 https://msdn.microsoft.com/en-us/library/dd504833.aspx
AAL 구성요소 두번째
asynchronous agents
asynchronous agents
• asynchronous agents는 비교적 복잡한 작업이나, I/O를 비동기
적으로 처리하기 위한 독립적인 컴포넌트이다.
• 다른 asynchronous agent나 메시지 블록과 메시지를 이용해서
통신을 한다.
• 각각의 asynchronous agents는 하나의 태스크로 concurrency
runtime에 의해서 스케쥴된다.
asynchronous agents state
• asynchronous agents는 프로세스 같이 상태가 존재 한다.
생성자 시작 메소드
종료 메소드
취소 메소드
https://msdn.microsoft.com/en-us/library/dd551463.aspx
https://msdn.microsoft.com/ja-jp/magazine/ff959205.aspx
asynchronous agents
• asynchronous agent는 concurrency::agent를 상속받는다.
• 실행할 작업을 순수 가상함수 run() 함수를 재정의 한다.
• run() 마지막에는 반드시 done() 메소드로 상태를 변경해 준다.
• asynchronous agent의 파괴자에서 agent::wait(this);를 호출해
서 done이 호출될 때(혹은 cancled())까지 소멸자 호출을 막아
야 한다.
asynchronous agents
생성자에서 입력포트를 받아서 설정
소멸자가 호출되서 에이전트가 종료상태전에 완료 되지 못하도록
run함수를 재정의 한다. 이 함수가 실제 실행하는 작업.
상태를 종료 상태로 만든다.
https://msdn.microsoft.com/ko-kr/magazine/ff959205.aspx
AAL 각각의 요소를 조합한다.
Tying Everything Together
Tying Everything Together
현재 시간을 더해주는 메시지 블록
각각의 에이젼트에 메시지블록 (트랜스포머이므로
소스이자 타겟이다)을 연결해 준다.
각각의 에이젼트를 실행 상태로 변경
비동기로 실행되므로 이다음 줄이 실행된다.
각각의 소멸자에서 wait를 호출하거
나 바깥에서 호출한다. 종료상태가
될 때 까지 소멸자 호출을 막는다.

More Related Content

What's hot

portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운Namwun Kim
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2Byeongsu Kang
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
잭블랙이블랙잭을한다 - 최종발표
잭블랙이블랙잭을한다 - 최종발표잭블랙이블랙잭을한다 - 최종발표
잭블랙이블랙잭을한다 - 최종발표Seokmin No
 
More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)경섭 심
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo Koo
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화Seungmo Koo
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io modelNam Hyeonuk
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차Injae Lee
 
게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅Seungmo Koo
 

What's hot (20)

portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
잭블랙이블랙잭을한다 - 최종발표
잭블랙이블랙잭을한다 - 최종발표잭블랙이블랙잭을한다 - 최종발표
잭블랙이블랙잭을한다 - 최종발표
 
More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)More Effective Python 3st (Multitask)
More Effective Python 3st (Multitask)
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
게임서버프로그래밍 #7 - 패킷핸들링 및 암호화
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io model
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
More effective c++ 3주차
More effective c++ 3주차More effective c++ 3주차
More effective c++ 3주차
 
게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅
 

Similar to Asynchronous agents library(aal)pdf

20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
네트워크 프로그래밍 입출력 다중화 & 논블록소켓
네트워크 프로그래밍 입출력 다중화 & 논블록소켓네트워크 프로그래밍 입출력 다중화 & 논블록소켓
네트워크 프로그래밍 입출력 다중화 & 논블록소켓Eutark Park
 
버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작Vong Sik Kong
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신Hyunsoo Jung
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent serversTonyYoon12
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영NAVER D2
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxsung suk seo
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍흥배 최
 

Similar to Asynchronous agents library(aal)pdf (20)

20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
네트워크 프로그래밍 입출력 다중화 & 논블록소켓
네트워크 프로그래밍 입출력 다중화 & 논블록소켓네트워크 프로그래밍 입출력 다중화 & 논블록소켓
네트워크 프로그래밍 입출력 다중화 & 논블록소켓
 
버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작버클리Db 를 이용한 게임 서버 제작
버클리Db 를 이용한 게임 서버 제작
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
 
Html5
Html5 Html5
Html5
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Warp
WarpWarp
Warp
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptx
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 

Asynchronous agents library(aal)pdf

  • 2. 데이터의 흐름(dataflow) • 기존의 병렬화 방식(동시실행지원 컨테이너,병렬가능 반복구문도 포 함해서) -> 각각의 코드 조각을 여러 개의 스레드에서 실행되게 하는 것에 매 우 효율적이다. • 하지만 병렬처리의 속도에 영향을 주는 가장 큰 영향을 주는 대기시 간(I/O 같은 것)에 대응 하기에 효율적인 것은 아니다. • 결국 데이터의 흐름에 집중해볼 필요가 있다. ->데이터 흐름 중심 프로그래밍
  • 3. Actor-Based Programming • 하나의 어플리케이션을 병렬실행 가능한 여러 개의 독립된 부분(Actor)으로 나눈다. • 각각의 Actor는 메시지(데이터를 총칭하는것) 를 주고 받으면서 결과를 만들어 낸다. • 즉, 공유 데이터가 없다. • 이런 방식으로 설계하다 보면 개발자들이 좀더 데이터 흐름을 중심으로 생각하면서 프로그래밍 할 수 있다. -> 하지만 결국 똑같은 거 아닐까?
  • 4. The Concurrency Runtime • Scheduler와 Resource Manager 로 구성되어있다. • Scheduler는 Resource Manager 로 부터 컴퓨터의 자원정보를 모 은다. • 병렬실행 가능한 부분의 actor를 효율적으로 scheduling해서 실행 한다. • 고수준에서 병렬 프로그래밍 할 수있게 추상화된 구조다. https://msdn. microsoft.com /en- us/library/ee2 07192.aspx
  • 5. The Concurrency Runtime https://msdn. microsoft.com /en- us/library/ee2 07192.aspx 하지만 vs 2015 그 이상 에서는 테스크 클래스와 그 연관 클래스(ppltasks.h)를 스케줄링 하는데 Concurrency Runtime을 사용하지 않는다. 더 좋은 Windows ThreadPool 을 사용한다.->AAL도 포함인가?
  • 7. Message-Passing Framework • 여러 종류의 메시지 블록으로 구성된다. • 각각의 메시지 블록은 메시지를 받고, 처리하고 전달하는 역할 을 한다. • 이런 메시지 블록들을 연결해서 동작들이 파이프 라인처럼 작 동하게(순서대로 작동하게) 할 수 있다. • 또한 각각의 메시지 블록은 병렬적으로 스케줄링 돼서 실행된 다. https://msdn.microsoft.com/ko-kr/magazine/ff959205.aspx
  • 8. ISource and ITarget. • 각각의 메시지 블록은 메시지를 받고, 처리하고 보내는역할을 한다. • Isource<Type>는 입력포트 • Itarget<Type>은 출력포트 라고 생각하면 된다. • 각각의 메시지 블록역할에 따라 두타입을 을 상속받는다.
  • 9. Concurrncy:: send/asend,receive/try_receive • 각각의 블록으로 파이프 라인을 구성하면 큐처럼 작동하게 된 다.(대부분의 블록은 입력된 순서대로 처리하고 출력한다.) • 각각의 send와 receive는 큐의 push 와 pop의 역할을 한다. 물 론 다음에 정리된내용을 보면 pop을 했을때 데이터가 지워질수 도 아닐수도 있다. • asend/try_receive 는 비동기 방식 즉 보내기나 받기가 완료 되 었나를 확인하지 않고 바로 리턴 되는 함수들이다.
  • 10. Message Blocks: unbounded_buffer<Type> • 큐처럼 작용하는 메시지 블록 (push,pop) • 개수의 제한은 정해져 있지 않다. • 여러 개의 소스 로부터 받아올 수 있다. • 여러 개의 타겟에 보낼 수 있다 • 하지만 큐처럼 사용되기 때문에 보통 하나의 타겟에 보내도록 사용된다. https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 11. Message Blocks: overwrite_buffer<Type> • 앞의 unbounded_buffer와 유사. • 하지만 한 개의 값만 저장. • 계속 넣으면 덮어써진다. • 또 다른 블록이나 에이전트에 전달을 해도 값이 없어지지않는다. • 그래서 보통 하나의 소스로 부터 여러 개의 타겟으로 보내는데 사용 https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 12. Message Blocks: single_assignment Class • overwrite_buffer와 거의 유사 • 하지만 한번밖에 쓸수가 없다. 처음 값이 유지됨 https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 13. Message Blocks: call<Type> • 메시지를 받는다. • 받은 메시지를 사용자가 지정한 작업을 수행한다. • 람다,함수객체,함수자등을 사용 할수 있다. • 다른 함수호출과 다른점은 입력 과 작업수행이 병렬적으로 스케 줄 된다는 것이다. https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 14. Message Blocks:transformer<Input,Output> • 메시지를 받고 보낸다. • Call과 비슷하게 어떤 작업을 수행할수 있다. • 다른 블록들과 다르게 입력 타입과 출력 타입을 다르게 설정할수 있다. https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 15. Message Blocks:그 외 • 여러 개의 메시지를 하나의 메시지로묶어주는 블록 make_join(&tmbuf, &kbbuf); (multitype_join 도 존재 서로다른타입을 받을수 있다.) make_choice(&fib35, &fib37, &half_of_fib42); • 다른 블록에 일정 시간간격 마다 메시지를 보낸다. timer<wchar_t> progress_timer(100u, L'.', &print_character, true); • 추가 참고 https://msdn.microsoft.com/en-us/library/dd504833.aspx
  • 17. asynchronous agents • asynchronous agents는 비교적 복잡한 작업이나, I/O를 비동기 적으로 처리하기 위한 독립적인 컴포넌트이다. • 다른 asynchronous agent나 메시지 블록과 메시지를 이용해서 통신을 한다. • 각각의 asynchronous agents는 하나의 태스크로 concurrency runtime에 의해서 스케쥴된다.
  • 18. asynchronous agents state • asynchronous agents는 프로세스 같이 상태가 존재 한다. 생성자 시작 메소드 종료 메소드 취소 메소드 https://msdn.microsoft.com/en-us/library/dd551463.aspx https://msdn.microsoft.com/ja-jp/magazine/ff959205.aspx
  • 19. asynchronous agents • asynchronous agent는 concurrency::agent를 상속받는다. • 실행할 작업을 순수 가상함수 run() 함수를 재정의 한다. • run() 마지막에는 반드시 done() 메소드로 상태를 변경해 준다. • asynchronous agent의 파괴자에서 agent::wait(this);를 호출해 서 done이 호출될 때(혹은 cancled())까지 소멸자 호출을 막아 야 한다.
  • 20. asynchronous agents 생성자에서 입력포트를 받아서 설정 소멸자가 호출되서 에이전트가 종료상태전에 완료 되지 못하도록 run함수를 재정의 한다. 이 함수가 실제 실행하는 작업. 상태를 종료 상태로 만든다. https://msdn.microsoft.com/ko-kr/magazine/ff959205.aspx
  • 21. AAL 각각의 요소를 조합한다. Tying Everything Together
  • 22. Tying Everything Together 현재 시간을 더해주는 메시지 블록 각각의 에이젼트에 메시지블록 (트랜스포머이므로 소스이자 타겟이다)을 연결해 준다. 각각의 에이젼트를 실행 상태로 변경 비동기로 실행되므로 이다음 줄이 실행된다. 각각의 소멸자에서 wait를 호출하거 나 바깥에서 호출한다. 종료상태가 될 때 까지 소멸자 호출을 막는다.