SlideShare a Scribd company logo
7가지 동시성 모델
6장. 순차 프로세스 통신
아꿈사 스터디 - 정현수
1일차
core.async 라이브러리
● clojure.core.async documentation
● clojure/core.async github
채널
채널이란?
스레드의 안정성을 제공하는 “큐(Queue)”
이 채널에 참조를 가진 작업은 “큐”에 메세지 추가/삭제 가능하다.
보내는 개체와 받는 개체가 서로 알 필요가 없다.
채널 생성
채널
채널의 버퍼 1 : 블로킹 버퍼
채널은 기본적으로 버퍼를 가지지 않으며, 메시지를 수신할 때까지 블로킹 된다.
채널
채널의 버퍼 1 : 블로킹 버퍼 → 채널에 버퍼 주기
close! 가 없다면 마지막 (<!! bc)는 새로운 메시지를
수신할 때까지 대기할 것이다.
채널
채널의 버퍼 2 : 버리는 버퍼
채널
채널의 버퍼 3 : 슬라이딩 버퍼
고 블록
고 블록
순차적인 코드를 사건 중심 코드로 재작성하는 것
제어의 역전을 통해 실행하던 스레드가 블로킹되는 대신 “주차 상태”로 멈추고,
다른 처리를 할 수 있게 해준다.
(스레드와 달리) 사용하는데 많은 비용이 들지 않는다.
제어의 역전 과정
1) 고 블록 내부에서 작성된 코드는 하나의 State Machine으로 전환
2) 채널에 Read/Write시 (블로킹 대신)갖고 있던 스레드의 통제를 포기하고 구석에 주차(parking)
3) 다음 실행 순서가 돌아오면 상태를 전이시킨다.
4) 원래 하던 일을 다른 스레드에서 계속 수행한다.
고 블록
2. x, y 값을 입력한 후...
3. 결과값이 출력되었다.
1. 고 블록을 사용하지 않을 경우
x, y 값을 입력 받을 때까지 블로킹 된다.
고 블록
고 블록을 사용하여 블로킹이 발생하지 않았다.
이때 고 블록 구문에는 <!!, >!! 대신 <!, >!을 사용하였다.
에라토스테네스의 체
에라토스테네스의 체
2일차
여러 채널 다루기
alt! 함수
둘 이상의 채널 중 하나를 선택하여 값을 읽거나 쓰게 해준다.
코드를 효율적이며 간결하게 만들어 준다.
1. 2개의 채널을 만들고,
2. go 블록 무한 루프를 돌며 alt!를 이용해 두 채널에서 값을 읽는다.
여러 채널 다루기
timeout 함수
명시한 밀리초만큼 흐르면 자동으로 닫히는 채널을 리턴
Reified Timeout (구체화 타임아웃)
여러 개의 연결을 하나로 묶어서 전체적으로 소비하는 시간에 대해 제한을 줄 때 유용하다.
한 개의 타임아웃을 만든 후, 열에 담긴 각각의 연결마다 그 타임아웃을 전달
여러 채널 다루기
구체화 타임아웃 : 에라토스테네스의 체 코드 수정
무한 루프를 돌며 alt!!에 의해
(1) 새로운 소수가 준비되거나
(2) limit가 타임아웃이 될때까지 블로킹된다.
비동기적인 폴링
폴링 함수
정기적으로 수행될 action이 go 블록 내부에서 호출되어
“주차하는 함수(<!)”를 호출할 수 있을것 같다.
예상과 달리 에러가 발생하였다.
“주차하는 호출”은 고 블록 내에서 “직접적”으로 일어나야 한다.
비동기적인 폴링
폴링 매크로
<함수> 대신 <매크로>를 사용하여 앞서 보았던 “폴링 함수”의 문제점 해결
<매크로>는 직접 컴파일되는 것이 아니라 컴파일될 코드를 리턴한다.
즉, 컴파일 시 확장되므로 전달된 코드는 inline 처리되어 poll의 go 블록 내에 직접 포함된다.
매크로 확장(macroexpand)를 통해 생성된 코드 확인 가능
비동기적인 폴링
폴링 매크로
매크로 확장 (macroexpand)
전달된 코드가 매크로 자체 내부에 있는 코드로 어떻게 이어졌는지(Spliced),
seconds#가 어떻게 고유한 이름으로 전환되었는지 알 수 있다.
비 동기적인 IO
비 동기적 IO
연결마다 하나의 스레드를 갖는 것이 아닌,
여러 동작을 한꺼번에 시작한 다음 어느 것이 데이터가 준비되었을 때 통보해오는 방법
콜백 호출이 많아져 문제가 발생할 수 있다.
core.async로 통합하여 구현할 예정
비 동기적인 IO
RSS 리더 구현
비 동기적인 IO
비 동기적인 IO
비 동기적인 IO
3일차
클로저 스크립트
클로저 스크립트
https://github.com/clojure/clojurescript
“자바 바이트코드”가 아닌 “자바스크립트”로 컴파일되는 클로저 버전
서버 / 클라이언트가 “클로저”로 작성된 웹 어플리케이션 작성 가능
클로저의 core.async 지원
콜백 지옥 해결 가능
클로저 스크립트의 컴파일 과정
클라이언트 측 : 클로저 스크립트를 자바스크립트 파일로 컴파일
서버 측 : 서버측 코드 컴파일 후 자바스크립트를 포함한 전체를 서비스하기 위한 서버를 실행
클로저 스크립트
기존 자바스크립트
자바스크립트 엔진은 “단일 스레드” 사용
멀티 스레드와 관련있는 core.async와의 연관관계는?
Cooperative Multitasking (협동적인 멀티태스킹)
go 매크로 사용
실제로는 “단일 스레드”를 사용하지만 “여러 개의 스레드”를 사용하는 것 처럼 보이게 구현
기본 예제
기본 예제
입력 받은 2개의 메시지를 각각 1초, 1.5초 간격으로 화면에 출력
클라이언트 측 소스 코드
기본 예제
서버 측 소스 코드
기본 예제
실행 방법
core.cljs 가 있는 폴더로 이동
컴파일 : lein cljsbuild once ⇒ target 폴더 생성
서버 실행 : lein run
웹 브라우저로 접속
추가 예제
추가 예제
마우스 클릭 시 이벤트 처리
클릭하면 크기가 줄어들다가 화면에서 사라지게 되는 원을 보여주는 웹 페이지
콜백 중심의 Javascript를 core.async의 채널 중심으로 옮김으로써 “콜백 지옥”에서 탈출할 수 있다.
클라이언트 측 소스 코드
추가 예제
서버 측 소스 코드
추가 예제
서버 측 소스 코드
콜백 지옥 벗어나기
콜백 지옥 벗어나기 예제
단계별로 진행하는 마법사 UI 구현
콜백을 사용하지 않고 이벤트 처리
콜백 지옥 벗어나기
출처
7가지 동시성 모델 (한빛미디어, 폴 부처 지음 / 임백준 옮김)
Clojure Documentation : https://clojuredocs.org/core-library
에라토스테네스의 체 Wikipedia : https://ko.wikipedia.org/wiki/에라토스테네스의_체

More Related Content

What's hot

Pemeliharaan peralatan cubicle out going 20 k v gi
Pemeliharaan peralatan cubicle out going 20 k v giPemeliharaan peralatan cubicle out going 20 k v gi
Pemeliharaan peralatan cubicle out going 20 k v gi
Suyono Suyono
 
pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기
Yeongseon Choe
 
PROTEKSI TENAGA LISTRIK
PROTEKSI TENAGA LISTRIK PROTEKSI TENAGA LISTRIK
PROTEKSI TENAGA LISTRIK
Politeknik Negeri Ujung Pandang
 
Soal Analisa Sistem Tenaga Listrik
Soal Analisa Sistem Tenaga ListrikSoal Analisa Sistem Tenaga Listrik
Soal Analisa Sistem Tenaga Listrik
azikin09
 
Soal tugas har_generator_21_sd__28_agustus__2014
Soal tugas har_generator_21_sd__28_agustus__2014Soal tugas har_generator_21_sd__28_agustus__2014
Soal tugas har_generator_21_sd__28_agustus__2014Ilcham27
 
KOORDINASI ISOLASI
KOORDINASI ISOLASIKOORDINASI ISOLASI
SOLDAMATIC EDUCATIONAL CATALOG 2013
SOLDAMATIC EDUCATIONAL CATALOG 2013SOLDAMATIC EDUCATIONAL CATALOG 2013
SOLDAMATIC EDUCATIONAL CATALOG 2013
SEABERY
 
Impact of wind power on power system operation
Impact of wind power on power system operationImpact of wind power on power system operation
Impact of wind power on power system operation
Leonardo ENERGY
 
Materi Teknik Tegangan Tinggi
Materi Teknik Tegangan TinggiMateri Teknik Tegangan Tinggi
Materi Teknik Tegangan TinggiGredi Arga
 
9 Sistem Pentanahan
9 Sistem Pentanahan9 Sistem Pentanahan
9 Sistem Pentanahan
Simon Patabang
 
Instalasi motor 3 fasa
Instalasi motor 3 fasaInstalasi motor 3 fasa
Instalasi motor 3 fasa
Indra S Wahyudi
 
AC Power Analysis
AC Power AnalysisAC Power Analysis
AC Power Analysis
Swadexi Istiqphara
 
Generator
GeneratorGenerator
Generator
BaRoez THesa
 
JARINGAN DISTRIBUSI
JARINGAN  DISTRIBUSIJARINGAN  DISTRIBUSI
JARINGAN DISTRIBUSI
Politeknik Negeri Ujung Pandang
 
Solar thermal power
Solar thermal powerSolar thermal power
Solar thermal power
VIJENDRAMEENA5
 
3 Kapasitor Bank
3 Kapasitor Bank3 Kapasitor Bank
3 Kapasitor Bank
Simon Patabang
 
Voltage Regulation and Control in Transmission Lines
Voltage Regulation and Control in Transmission LinesVoltage Regulation and Control in Transmission Lines
Voltage Regulation and Control in Transmission Lines
ToshaliMohapatra
 
IPGCL/PPCL Training presentation
IPGCL/PPCL Training presentationIPGCL/PPCL Training presentation
IPGCL/PPCL Training presentation
Shubhra Dhyani
 
PROTEKSI SISTEM TENAGA LISTRIK
PROTEKSI SISTEM TENAGA LISTRIK PROTEKSI SISTEM TENAGA LISTRIK
PROTEKSI SISTEM TENAGA LISTRIK
Politeknik Negeri Ujung Pandang
 
Power plant engineering
Power plant engineeringPower plant engineering
Power plant engineering
mahe49
 

What's hot (20)

Pemeliharaan peralatan cubicle out going 20 k v gi
Pemeliharaan peralatan cubicle out going 20 k v giPemeliharaan peralatan cubicle out going 20 k v gi
Pemeliharaan peralatan cubicle out going 20 k v gi
 
pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기
 
PROTEKSI TENAGA LISTRIK
PROTEKSI TENAGA LISTRIK PROTEKSI TENAGA LISTRIK
PROTEKSI TENAGA LISTRIK
 
Soal Analisa Sistem Tenaga Listrik
Soal Analisa Sistem Tenaga ListrikSoal Analisa Sistem Tenaga Listrik
Soal Analisa Sistem Tenaga Listrik
 
Soal tugas har_generator_21_sd__28_agustus__2014
Soal tugas har_generator_21_sd__28_agustus__2014Soal tugas har_generator_21_sd__28_agustus__2014
Soal tugas har_generator_21_sd__28_agustus__2014
 
KOORDINASI ISOLASI
KOORDINASI ISOLASIKOORDINASI ISOLASI
KOORDINASI ISOLASI
 
SOLDAMATIC EDUCATIONAL CATALOG 2013
SOLDAMATIC EDUCATIONAL CATALOG 2013SOLDAMATIC EDUCATIONAL CATALOG 2013
SOLDAMATIC EDUCATIONAL CATALOG 2013
 
Impact of wind power on power system operation
Impact of wind power on power system operationImpact of wind power on power system operation
Impact of wind power on power system operation
 
Materi Teknik Tegangan Tinggi
Materi Teknik Tegangan TinggiMateri Teknik Tegangan Tinggi
Materi Teknik Tegangan Tinggi
 
9 Sistem Pentanahan
9 Sistem Pentanahan9 Sistem Pentanahan
9 Sistem Pentanahan
 
Instalasi motor 3 fasa
Instalasi motor 3 fasaInstalasi motor 3 fasa
Instalasi motor 3 fasa
 
AC Power Analysis
AC Power AnalysisAC Power Analysis
AC Power Analysis
 
Generator
GeneratorGenerator
Generator
 
JARINGAN DISTRIBUSI
JARINGAN  DISTRIBUSIJARINGAN  DISTRIBUSI
JARINGAN DISTRIBUSI
 
Solar thermal power
Solar thermal powerSolar thermal power
Solar thermal power
 
3 Kapasitor Bank
3 Kapasitor Bank3 Kapasitor Bank
3 Kapasitor Bank
 
Voltage Regulation and Control in Transmission Lines
Voltage Regulation and Control in Transmission LinesVoltage Regulation and Control in Transmission Lines
Voltage Regulation and Control in Transmission Lines
 
IPGCL/PPCL Training presentation
IPGCL/PPCL Training presentationIPGCL/PPCL Training presentation
IPGCL/PPCL Training presentation
 
PROTEKSI SISTEM TENAGA LISTRIK
PROTEKSI SISTEM TENAGA LISTRIK PROTEKSI SISTEM TENAGA LISTRIK
PROTEKSI SISTEM TENAGA LISTRIK
 
Power plant engineering
Power plant engineeringPower plant engineering
Power plant engineering
 

Viewers also liked

7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
Hyunsoo Jung
 
Ddd start! 6장. 응용 서비스와 표현 영역
Ddd start!   6장. 응용 서비스와 표현 영역Ddd start!   6장. 응용 서비스와 표현 영역
Ddd start! 6장. 응용 서비스와 표현 영역
Hyunsoo Jung
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
Hyunsoo Jung
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
HyeonSeok Choi
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
HyeonSeok Choi
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
beom kyun choi
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
Jaejin Yun
 
암호화 기법.Ver2
암호화 기법.Ver2암호화 기법.Ver2
암호화 기법.Ver2Sein Jang
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
HyeonSeok Choi
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
HyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
HyeonSeok Choi
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 

Viewers also liked (20)

7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
Ddd start! 6장. 응용 서비스와 표현 영역
Ddd start!   6장. 응용 서비스와 표현 영역Ddd start!   6장. 응용 서비스와 표현 영역
Ddd start! 6장. 응용 서비스와 표현 영역
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링실무로 배우는 시스템 성능 최적화   10부. 네트워크 모니터링
실무로 배우는 시스템 성능 최적화 10부. 네트워크 모니터링
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Concurreny programming
Concurreny programmingConcurreny programming
Concurreny programming
 
암호화 기법.Ver2
암호화 기법.Ver2암호화 기법.Ver2
암호화 기법.Ver2
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
Code1_2
Code1_2Code1_2
Code1_2
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 

Similar to 7가지 동시성 모델 - 6장. 순차 프로세스 통신

동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
NAVER D2
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
sung ki choi
 
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
Seomgi Han
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
HYUNWOO KIM
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
Byeongsu Kang
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
TonyYoon12
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
I os 2
I os 2I os 2
I os 2
Sanghoon Han
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
AWS DevDay 실습 가이드 - 콘테이너
AWS DevDay 실습 가이드 - 콘테이너AWS DevDay 실습 가이드 - 콘테이너
AWS DevDay 실습 가이드 - 콘테이너
Amazon Web Services Korea
 
[Tool] cwb cqp
[Tool] cwb cqp[Tool] cwb cqp
[Tool] cwb cqp
Gyuhyeon Nam
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internalsNAVER D2
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
ssuser0c2478
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기Myoung-gyu Gang
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)
JungGeun Lee
 

Similar to 7가지 동시성 모델 - 6장. 순차 프로세스 통신 (20)

동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
I os 2
I os 2I os 2
I os 2
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
AWS DevDay 실습 가이드 - 콘테이너
AWS DevDay 실습 가이드 - 콘테이너AWS DevDay 실습 가이드 - 콘테이너
AWS DevDay 실습 가이드 - 콘테이너
 
[Tool] cwb cqp
[Tool] cwb cqp[Tool] cwb cqp
[Tool] cwb cqp
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internals
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)
 

7가지 동시성 모델 - 6장. 순차 프로세스 통신

  • 1. 7가지 동시성 모델 6장. 순차 프로세스 통신 아꿈사 스터디 - 정현수
  • 3. core.async 라이브러리 ● clojure.core.async documentation ● clojure/core.async github
  • 4. 채널 채널이란? 스레드의 안정성을 제공하는 “큐(Queue)” 이 채널에 참조를 가진 작업은 “큐”에 메세지 추가/삭제 가능하다. 보내는 개체와 받는 개체가 서로 알 필요가 없다. 채널 생성
  • 5. 채널 채널의 버퍼 1 : 블로킹 버퍼 채널은 기본적으로 버퍼를 가지지 않으며, 메시지를 수신할 때까지 블로킹 된다.
  • 6. 채널 채널의 버퍼 1 : 블로킹 버퍼 → 채널에 버퍼 주기 close! 가 없다면 마지막 (<!! bc)는 새로운 메시지를 수신할 때까지 대기할 것이다.
  • 7. 채널 채널의 버퍼 2 : 버리는 버퍼
  • 8. 채널 채널의 버퍼 3 : 슬라이딩 버퍼
  • 9. 고 블록 고 블록 순차적인 코드를 사건 중심 코드로 재작성하는 것 제어의 역전을 통해 실행하던 스레드가 블로킹되는 대신 “주차 상태”로 멈추고, 다른 처리를 할 수 있게 해준다. (스레드와 달리) 사용하는데 많은 비용이 들지 않는다. 제어의 역전 과정 1) 고 블록 내부에서 작성된 코드는 하나의 State Machine으로 전환 2) 채널에 Read/Write시 (블로킹 대신)갖고 있던 스레드의 통제를 포기하고 구석에 주차(parking) 3) 다음 실행 순서가 돌아오면 상태를 전이시킨다. 4) 원래 하던 일을 다른 스레드에서 계속 수행한다.
  • 10. 고 블록 2. x, y 값을 입력한 후... 3. 결과값이 출력되었다. 1. 고 블록을 사용하지 않을 경우 x, y 값을 입력 받을 때까지 블로킹 된다.
  • 11. 고 블록 고 블록을 사용하여 블로킹이 발생하지 않았다. 이때 고 블록 구문에는 <!!, >!! 대신 <!, >!을 사용하였다.
  • 15. 여러 채널 다루기 alt! 함수 둘 이상의 채널 중 하나를 선택하여 값을 읽거나 쓰게 해준다. 코드를 효율적이며 간결하게 만들어 준다. 1. 2개의 채널을 만들고, 2. go 블록 무한 루프를 돌며 alt!를 이용해 두 채널에서 값을 읽는다.
  • 16. 여러 채널 다루기 timeout 함수 명시한 밀리초만큼 흐르면 자동으로 닫히는 채널을 리턴 Reified Timeout (구체화 타임아웃) 여러 개의 연결을 하나로 묶어서 전체적으로 소비하는 시간에 대해 제한을 줄 때 유용하다. 한 개의 타임아웃을 만든 후, 열에 담긴 각각의 연결마다 그 타임아웃을 전달
  • 17. 여러 채널 다루기 구체화 타임아웃 : 에라토스테네스의 체 코드 수정 무한 루프를 돌며 alt!!에 의해 (1) 새로운 소수가 준비되거나 (2) limit가 타임아웃이 될때까지 블로킹된다.
  • 18. 비동기적인 폴링 폴링 함수 정기적으로 수행될 action이 go 블록 내부에서 호출되어 “주차하는 함수(<!)”를 호출할 수 있을것 같다. 예상과 달리 에러가 발생하였다. “주차하는 호출”은 고 블록 내에서 “직접적”으로 일어나야 한다.
  • 19. 비동기적인 폴링 폴링 매크로 <함수> 대신 <매크로>를 사용하여 앞서 보았던 “폴링 함수”의 문제점 해결 <매크로>는 직접 컴파일되는 것이 아니라 컴파일될 코드를 리턴한다. 즉, 컴파일 시 확장되므로 전달된 코드는 inline 처리되어 poll의 go 블록 내에 직접 포함된다. 매크로 확장(macroexpand)를 통해 생성된 코드 확인 가능
  • 20. 비동기적인 폴링 폴링 매크로 매크로 확장 (macroexpand) 전달된 코드가 매크로 자체 내부에 있는 코드로 어떻게 이어졌는지(Spliced), seconds#가 어떻게 고유한 이름으로 전환되었는지 알 수 있다.
  • 21. 비 동기적인 IO 비 동기적 IO 연결마다 하나의 스레드를 갖는 것이 아닌, 여러 동작을 한꺼번에 시작한 다음 어느 것이 데이터가 준비되었을 때 통보해오는 방법 콜백 호출이 많아져 문제가 발생할 수 있다. core.async로 통합하여 구현할 예정
  • 22. 비 동기적인 IO RSS 리더 구현
  • 27. 클로저 스크립트 클로저 스크립트 https://github.com/clojure/clojurescript “자바 바이트코드”가 아닌 “자바스크립트”로 컴파일되는 클로저 버전 서버 / 클라이언트가 “클로저”로 작성된 웹 어플리케이션 작성 가능 클로저의 core.async 지원 콜백 지옥 해결 가능 클로저 스크립트의 컴파일 과정 클라이언트 측 : 클로저 스크립트를 자바스크립트 파일로 컴파일 서버 측 : 서버측 코드 컴파일 후 자바스크립트를 포함한 전체를 서비스하기 위한 서버를 실행
  • 28. 클로저 스크립트 기존 자바스크립트 자바스크립트 엔진은 “단일 스레드” 사용 멀티 스레드와 관련있는 core.async와의 연관관계는? Cooperative Multitasking (협동적인 멀티태스킹) go 매크로 사용 실제로는 “단일 스레드”를 사용하지만 “여러 개의 스레드”를 사용하는 것 처럼 보이게 구현
  • 29. 기본 예제 기본 예제 입력 받은 2개의 메시지를 각각 1초, 1.5초 간격으로 화면에 출력 클라이언트 측 소스 코드
  • 30. 기본 예제 서버 측 소스 코드
  • 31. 기본 예제 실행 방법 core.cljs 가 있는 폴더로 이동 컴파일 : lein cljsbuild once ⇒ target 폴더 생성 서버 실행 : lein run 웹 브라우저로 접속
  • 32. 추가 예제 추가 예제 마우스 클릭 시 이벤트 처리 클릭하면 크기가 줄어들다가 화면에서 사라지게 되는 원을 보여주는 웹 페이지 콜백 중심의 Javascript를 core.async의 채널 중심으로 옮김으로써 “콜백 지옥”에서 탈출할 수 있다. 클라이언트 측 소스 코드
  • 33. 추가 예제 서버 측 소스 코드
  • 34. 추가 예제 서버 측 소스 코드
  • 35. 콜백 지옥 벗어나기 콜백 지옥 벗어나기 예제 단계별로 진행하는 마법사 UI 구현 콜백을 사용하지 않고 이벤트 처리
  • 37. 출처 7가지 동시성 모델 (한빛미디어, 폴 부처 지음 / 임백준 옮김) Clojure Documentation : https://clojuredocs.org/core-library 에라토스테네스의 체 Wikipedia : https://ko.wikipedia.org/wiki/에라토스테네스의_체

Editor's Notes

  1. remove< 함수는 불리언 함수의 결과가 false에 해당하는 값만 적혀있는 채널을 리턴한다.
  2. 역따옴포(`) : 문법 인용 연산자. 소스 코드를 받아 실행하는 대신, 나중에 컴파일될 수 있는 표현을 리턴 ~(unquote)연산자, ~@(unquote splice)연산자 : 코드 내에서 매크로에 전달된 인수를 참조 #(auto-gensym) 접미사 : 클로저가 고유한 이름을 생성하도록 보장
  3. 4번째 줄에 생성된 자바스크립트 코드는 7번째 줄의 <div id=”content”></div>에 내용을 채운다.
  4. :require-macros 를 통해 매크로 참조 : 클로저와 클로저 스크립트 간의 차이점 6줄 output 함수 : 메시지를 DOM 요소에 더하기 위해 “구글 클로저 라이브러리” 사용 14줄, 18줄 output 함수 사용 : 각 go 블록 내에서 1초, 1.5초 마다 메시지 출력 20줄 : 실행
  5. 구글 클로저의 그래픽 지원 도구 이용 10번째 줄 : create-graphics 함수는 DOM 요소를 받아들여서 그래픽 표면처럼 사용할 수 있는 객체를 리턴 15번째 줄 : 원의 선 색 지정 19번째 줄 : 구글 클로저의 drawCircle 함수로 원을 그린다 21번째 줄 : 25밀리초의 타임아웃 값을 사용하는 루프에 들어가서 22번째 줄 : setRadius 함수를 초당 40번씩 호출 25번째 줄 : 반지름이 0이 되면 dispose 함수를 호출하여 원을 제거 31번째 줄 : 마우스 클릭 이벤트를 받을 수 있도록 구글 클로저의 (이벤트 리스너를 등록하게 하는) listen 함수를 사용
  6. (set! (.. elem -style -display) “block”) → elem.style.display = “block”
  7. 장점 유연성 : 채널은 독립적으로 생성되고, 데이터를 읽고 쓸 수가 있으며, 업무 사이에 전달될 수 있다. 효용성 : 콜백을 사용하지 않아 향상된 프로그래밍 모델 도입 가능 단점 분산 및 장애 허용 데드락에 걸릴 가능성 병렬성에 대한 직접적인 지원 없음