SlideShare a Scribd company logo
1 of 22
Download to read offline
Multi-Thread Programming
             RCL.ParallelExtensions (in RCL.Core)

                                                        2011.03




Copyright 2011 Realweb co., Ltd. All rights reserved.
목차
  1. 멀티스레드 프그래밍
       1.    개요
       2.    프로세스와 스레드
       3.    Thread Scheduling
       4.    Thread Kernel Objects
       5.    ThreadPool 과 Thread Context Switching
  2. 비동기 프로그래밍
       1.    비동기 프로그래밍 개요
       2.    비동기 프로그래밍 패턴 (APM, EAM)
       3.    Unifying Asynchrony
  3. 병렬 프로그래밍
       1.    필요성
       2.    TPL (Task Parallel Library)



2011-12-19                                 3
Multi-Thread Overview

    Multi-Tasking vs. Multi-Threading
      Multi-Tasking : 하나의 CPU가 여러 개의 프로세스를 교대로 수행

      Multi-Threading : 하나의 CPU가 여러 개의 Thread를 교대로 수행


    Multi-Threading 의 중요성
      프로세스 간의 통신은 속도 문제가 심함.Thread 간의 통신은 빠름

      한 프로세스로 작업하는 것은 사용자 응답성에 문제가 많음.

      프로세스보다 Thread 가 비용이 적게 듦

      프로세스 내에 Multi-Thread를 사용하므로서 성능을 향상 시킬 수 있지만,
        일반적인 안정성은 떯어짐.



2011-12-19                         4
Process 와 Thread

■ Process 와 Thread 의 구성요소
             프로세스의 가상 주소 공간            윈도우 운영 체제


             코드, 리소스, 전역 데이타          프로세스
                                      커널 객체

                 힙 (Heap)
                                       스레드
                                      커널 객체
                  환경변수
                                               스레드
                                              커널 객체
           스택              스택
         (스레드1)          (스레드2)



2011-12-19                        5
CPU Scheduling

    CPU Scheduling 이란
      한정된 CPU의 작업 처리 시간을 여러 프로세스 혹은 스레드가 공동으로 이용할
       수 있도록 분배하는 정책

    Microsoft Windows의 CPU Scheduling
      선점형 스케쥴링
      우선순위 (Priority)에 기반한 CPU 스케쥴링 기법을 사용
      OS에서 Priority를 기반으로 Thread Context Switching 수행

    Windows 에서 우선순위란
      Process 우선 순위
      Thread 우선 순위




2011-12-19                       6
Thread Synchronization

    스레드 동기화란?
      복수개의 스레드가 같은 리소스를 사용하고자 할 때, 순서대로 사용할 수 있도록 하여 리
       소스에 대한 처리가 제대로 될 수 있도록 함.


    Critical Section
      가장 가벼운 Thread Kernel object, 작은 범위, 적은 비용으로 내에서 동기화 수행
      같은 프로세스 내에서만 사용
    Mutex
      프로세스 간의 동기화도 수행 가능
      비용 증가, 처리 속도 느림
    Semaphore
      스레드를 제한된 개수만큼만 리소스를 사용할 수 있도록 동기화에 허용하는 객체
    Event
      Signal을 이용하여 동기화를 수행하는 객체
      Multi-Thread 에서 가장 유용하게 사용됨.

2011-12-19                      7
ThreadPool 비교

             CLR 2 ThreadPool                                          CLR 4 ThreadPool




 참고 : http://aviadezra.blogspot.com/2009/04/task-parallel-library-parallel.html
 참고 : http://debop.egloos.com/3795151


2011-12-19                                           8
ThreadPool 비교

CLR 2 ThreadPool




CLR 4 ThreadPool




2011-12-19           9
Machine      .NET 3.5           .NET 4      Improvement


A dual-core box   5.03 seconds     2.45 seconds      2.05x




A quad-core box 19.39 seconds      3.42 seconds      5.67x




2011-12-19                    10
2. 비동기 프로그래밍

C# and VB Evolution
                           C# + VB v.Next
                                                Asynchronous Programming


                  C# 4.0 + VB 10.0
                                            Dynamic + Language Parity


              C# 3.0 + VB 9.0
                                      Language Integrated Query


         C# 2.0 + VB 8.0
                                 Generics


  C# 1.0 + VB 7.0
                            Managed Code

2011-12-19                             11
Asynchrony in a Nutshell



 • Synchronous  Wait for result before returning
      – string DownloadString(...);


 • Asynchronous  Return now, call back with result
      – void DownloadStringAsync(..., Action<string> callback);


 • Asynchrony benefits
      – UI responsiveness: Frees UI thread for interaction
      – Server scalability: Thread can be reused for other requests




2011-12-19                             12
2.2 Synchronous vs. Asynchronous


var data = DownloadData(...);
ProcessData(data);




DownloadDataAsync(... , data => {
    ProcessData(data);
});
2.2 Synchronous vs. Asynchronous


var data = DownloadData(...);
ProcessData(data);




DownloadDataAsync(... , data => {
    ProcessData(data);
});
2.2 비동기 프로그래밍 디자인 패턴

    Asynchronous Programming Method (APM)
      BeginXXXX, EndXXXX 메소드를 제공 (SqlCommand)
      AsyncWaitHandle을 사용하여 실행 블로킹
      AsyncCallback 대리자를 사용하여, 비동기 작업 종료


    Event-based Asynchronous Method (EAM)
        XXXXAsync() 메소드 호출로 비동기 작업 시작
        비동기 작업 완료 시에 XXXXCompleted 이벤트 호출됨
        작업 취소 시에는 CancelAsync() 또는 MethodNameAsyncCancel() 호출
        BackgroundWorker, WebClient 등이 이에 해당됨


    Delegate를 이용한 비동기 작업
      BeginInvoke(), EndInvoke() 사용
      Task.Factory.FromAsync(), RCL.ParallelExtensions.DelegateAsync 클래스 참고



2011-12-19                             15
2.3 Unifying Asynchrony




An asynchronous scenario
   Scrape YouTube for video links
   Download two or more videos concurrently
   Create a mashup from downloaded videos
   Save the resulting video
2.3 Unifying Asynchrony




try {
    string[] videoUrls = await ScrapeYoutubeAsync(url);    // Network-bound
    Task<Video> t1 = DownloadVideoAsync(videoUrls[0]);     // Start two downloads
    Task<Video> t2 = DownloadVideoAsync(videoUrls[1]);
    Video[] vids = await Task.WhenAll(t1, t2);             // Wait for both
    Video v = await MashupVideosAsync(vids[0], vids[1]);   // CPU-bound
    await v.SaveAsync(textbox.Text);                       // IO-bound
}
catch (WebException ex) {
    ReportError(ex);
}
3.1 병렬 프로그래밍 필요성

   CPU 개발 Trend – Clock 속도에서 Core 수 증가로!!!  Multi-Core CPU 가 대세




 http://msdn.microsoft.com/en-us/library/ff963553.aspx

2011-12-19                                   18
4.2 TPL (Task Parallel Library)

    Task
      TaskFactory
      Task


    Parallel.For, Parallel.ForEach, Parallel.Invoke
    PLINQ (.AsParallel())




2011-12-19                            19
4.2 TPL (Task Parallel Library)




               Data Patitioning & Aggregate (PLINQ, Parallel.For())




                   Pipeline algorithm (Task.ContinueWith 등)
2011-12-19                             20
4.2 TPL Samples - ShopFloor Manager v2.0 구조
참고: https://svn.realweb21.com/svn/project/2009/KIMM-MES/trunk

                                                                    Master Data
                                                                    Connection               MES DB


                     SynchronizationContext
                           UI Update                                               Data
                                                                                  Uploader
                                                                                             Asnynchronous IO
       MainUI                                    ShopFloor
    Gauges/Charts                                Manager

                                                Acquisition Data
                                                  Collection

                 Event-Driven 방식


              RFID Reader
             Barcord Reader                                                           IO Board
                                              1. Asnynchronous IO
                                              2. Board 별 모든 센서 Scanning 통신
                                              3. Producer-Consumer 기법



2011-12-19                                              21
2. ICON SET
     Task     Groups   Computer            Server        Sub Process    Bullet




                Subprocess
                                                                                 1
       Task                       Groups   Groups                 End




2011-12-19                                          22
감사합니다



Copyright 2008 Realweb co., Ltd. All rights reserved.

More Related Content

What's hot

[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기NAVER D2
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화NAVER D2
 
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은jieun kim
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸NAVER D2
 
[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민NAVER D2
 
TXGX 2019_Melvin_Data Layer Architecture & Optimizations
TXGX 2019_Melvin_Data Layer Architecture & OptimizationsTXGX 2019_Melvin_Data Layer Architecture & Optimizations
TXGX 2019_Melvin_Data Layer Architecture & OptimizationsKlaytn
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm엑셈
 

What's hot (10)

[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기[252] 증분 처리 플랫폼 cana 개발기
[252] 증분 처리 플랫폼 cana 개발기
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
 
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸
 
[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민
 
TXGX 2019_Melvin_Data Layer Architecture & Optimizations
TXGX 2019_Melvin_Data Layer Architecture & OptimizationsTXGX 2019_Melvin_Data Layer Architecture & Optimizations
TXGX 2019_Melvin_Data Layer Architecture & Optimizations
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
 

Viewers also liked

05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요noerror
 
Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발trustinlee
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰Woojin Joe
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기Young D
 

Viewers also liked (7)

05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요
 
Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰자바 네트워크 소녀 Netty 리뷰
자바 네트워크 소녀 Netty 리뷰
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기
 

Similar to Multithread pattern 소개

세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기Ted Won
 
완료발표
완료발표완료발표
완료발표LINE+
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...문기 박
 
091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)Taegil Heo
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
Linux one brief_edm_202002
Linux one brief_edm_202002Linux one brief_edm_202002
Linux one brief_edm_202002jiyoungkim158
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file formatYoungjun Chang
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Kris Jeong
 
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdfChris Hoyean Song
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
Play node conference
Play node conferencePlay node conference
Play node conferenceJohn Kim
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)정명훈 Jerry Jeong
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)SANG WON PARK
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOI Goo Lee
 

Similar to Multithread pattern 소개 (20)

세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
완료발표
완료발표완료발표
완료발표
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)091106kofpublic 091108170852-phpapp02 (번역본)
091106kofpublic 091108170852-phpapp02 (번역본)
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
Linux one brief_edm_202002
Linux one brief_edm_202002Linux one brief_edm_202002
Linux one brief_edm_202002
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015
 
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
[KR] Building modern data pipeline with Snowflake + DBT + Airflow.pdf
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
 
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIO
 

More from Sunghyouk Bae

JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainersSunghyouk Bae
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafeSunghyouk Bae
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Sunghyouk Bae
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Sunghyouk Bae
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/HibernateSunghyouk Bae
 
Kotlin coroutines and spring framework
Kotlin coroutines and spring frameworkKotlin coroutines and spring framework
Kotlin coroutines and spring frameworkSunghyouk Bae
 
Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Sunghyouk Bae
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSunghyouk Bae
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 

More from Sunghyouk Bae (16)

JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainers
 
Introduction of failsafe
Introduction of failsafeIntroduction of failsafe
Introduction of failsafe
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
 
Spring data requery
Spring data requerySpring data requery
Spring data requery
 
Requery overview
Requery overviewRequery overview
Requery overview
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017
 
measure metrics
measure metricsmeasure metrics
measure metrics
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/Hibernate
 
Kotlin coroutines and spring framework
Kotlin coroutines and spring frameworkKotlin coroutines and spring framework
Kotlin coroutines and spring framework
 
Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)Java naming strategy (자바 명명 전략)
Java naming strategy (자바 명명 전략)
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSL
 
JUnit & AssertJ
JUnit & AssertJJUnit & AssertJ
JUnit & AssertJ
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
Using AdoRepository
Using AdoRepositoryUsing AdoRepository
Using AdoRepository
 
Strategy Maps
Strategy MapsStrategy Maps
Strategy Maps
 

Multithread pattern 소개

  • 1. Multi-Thread Programming RCL.ParallelExtensions (in RCL.Core) 2011.03 Copyright 2011 Realweb co., Ltd. All rights reserved.
  • 2. 목차 1. 멀티스레드 프그래밍 1. 개요 2. 프로세스와 스레드 3. Thread Scheduling 4. Thread Kernel Objects 5. ThreadPool 과 Thread Context Switching 2. 비동기 프로그래밍 1. 비동기 프로그래밍 개요 2. 비동기 프로그래밍 패턴 (APM, EAM) 3. Unifying Asynchrony 3. 병렬 프로그래밍 1. 필요성 2. TPL (Task Parallel Library) 2011-12-19 3
  • 3. Multi-Thread Overview Multi-Tasking vs. Multi-Threading  Multi-Tasking : 하나의 CPU가 여러 개의 프로세스를 교대로 수행  Multi-Threading : 하나의 CPU가 여러 개의 Thread를 교대로 수행 Multi-Threading 의 중요성  프로세스 간의 통신은 속도 문제가 심함.Thread 간의 통신은 빠름  한 프로세스로 작업하는 것은 사용자 응답성에 문제가 많음.  프로세스보다 Thread 가 비용이 적게 듦  프로세스 내에 Multi-Thread를 사용하므로서 성능을 향상 시킬 수 있지만, 일반적인 안정성은 떯어짐. 2011-12-19 4
  • 4. Process 와 Thread ■ Process 와 Thread 의 구성요소 프로세스의 가상 주소 공간 윈도우 운영 체제 코드, 리소스, 전역 데이타 프로세스 커널 객체 힙 (Heap) 스레드 커널 객체 환경변수 스레드 커널 객체 스택 스택 (스레드1) (스레드2) 2011-12-19 5
  • 5. CPU Scheduling CPU Scheduling 이란  한정된 CPU의 작업 처리 시간을 여러 프로세스 혹은 스레드가 공동으로 이용할 수 있도록 분배하는 정책 Microsoft Windows의 CPU Scheduling  선점형 스케쥴링  우선순위 (Priority)에 기반한 CPU 스케쥴링 기법을 사용  OS에서 Priority를 기반으로 Thread Context Switching 수행 Windows 에서 우선순위란  Process 우선 순위  Thread 우선 순위 2011-12-19 6
  • 6. Thread Synchronization 스레드 동기화란?  복수개의 스레드가 같은 리소스를 사용하고자 할 때, 순서대로 사용할 수 있도록 하여 리 소스에 대한 처리가 제대로 될 수 있도록 함. Critical Section  가장 가벼운 Thread Kernel object, 작은 범위, 적은 비용으로 내에서 동기화 수행  같은 프로세스 내에서만 사용 Mutex  프로세스 간의 동기화도 수행 가능  비용 증가, 처리 속도 느림 Semaphore  스레드를 제한된 개수만큼만 리소스를 사용할 수 있도록 동기화에 허용하는 객체 Event  Signal을 이용하여 동기화를 수행하는 객체  Multi-Thread 에서 가장 유용하게 사용됨. 2011-12-19 7
  • 7. ThreadPool 비교 CLR 2 ThreadPool CLR 4 ThreadPool 참고 : http://aviadezra.blogspot.com/2009/04/task-parallel-library-parallel.html 참고 : http://debop.egloos.com/3795151 2011-12-19 8
  • 8. ThreadPool 비교 CLR 2 ThreadPool CLR 4 ThreadPool 2011-12-19 9
  • 9. Machine .NET 3.5 .NET 4 Improvement A dual-core box 5.03 seconds 2.45 seconds 2.05x A quad-core box 19.39 seconds 3.42 seconds 5.67x 2011-12-19 10
  • 10. 2. 비동기 프로그래밍 C# and VB Evolution C# + VB v.Next Asynchronous Programming C# 4.0 + VB 10.0 Dynamic + Language Parity C# 3.0 + VB 9.0 Language Integrated Query C# 2.0 + VB 8.0 Generics C# 1.0 + VB 7.0 Managed Code 2011-12-19 11
  • 11. Asynchrony in a Nutshell • Synchronous  Wait for result before returning – string DownloadString(...); • Asynchronous  Return now, call back with result – void DownloadStringAsync(..., Action<string> callback); • Asynchrony benefits – UI responsiveness: Frees UI thread for interaction – Server scalability: Thread can be reused for other requests 2011-12-19 12
  • 12. 2.2 Synchronous vs. Asynchronous var data = DownloadData(...); ProcessData(data); DownloadDataAsync(... , data => { ProcessData(data); });
  • 13. 2.2 Synchronous vs. Asynchronous var data = DownloadData(...); ProcessData(data); DownloadDataAsync(... , data => { ProcessData(data); });
  • 14. 2.2 비동기 프로그래밍 디자인 패턴 Asynchronous Programming Method (APM)  BeginXXXX, EndXXXX 메소드를 제공 (SqlCommand)  AsyncWaitHandle을 사용하여 실행 블로킹  AsyncCallback 대리자를 사용하여, 비동기 작업 종료 Event-based Asynchronous Method (EAM)  XXXXAsync() 메소드 호출로 비동기 작업 시작  비동기 작업 완료 시에 XXXXCompleted 이벤트 호출됨  작업 취소 시에는 CancelAsync() 또는 MethodNameAsyncCancel() 호출  BackgroundWorker, WebClient 등이 이에 해당됨 Delegate를 이용한 비동기 작업  BeginInvoke(), EndInvoke() 사용  Task.Factory.FromAsync(), RCL.ParallelExtensions.DelegateAsync 클래스 참고 2011-12-19 15
  • 15. 2.3 Unifying Asynchrony An asynchronous scenario  Scrape YouTube for video links  Download two or more videos concurrently  Create a mashup from downloaded videos  Save the resulting video
  • 16. 2.3 Unifying Asynchrony try { string[] videoUrls = await ScrapeYoutubeAsync(url); // Network-bound Task<Video> t1 = DownloadVideoAsync(videoUrls[0]); // Start two downloads Task<Video> t2 = DownloadVideoAsync(videoUrls[1]); Video[] vids = await Task.WhenAll(t1, t2); // Wait for both Video v = await MashupVideosAsync(vids[0], vids[1]); // CPU-bound await v.SaveAsync(textbox.Text); // IO-bound } catch (WebException ex) { ReportError(ex); }
  • 17. 3.1 병렬 프로그래밍 필요성 CPU 개발 Trend – Clock 속도에서 Core 수 증가로!!!  Multi-Core CPU 가 대세 http://msdn.microsoft.com/en-us/library/ff963553.aspx 2011-12-19 18
  • 18. 4.2 TPL (Task Parallel Library) Task  TaskFactory  Task Parallel.For, Parallel.ForEach, Parallel.Invoke PLINQ (.AsParallel()) 2011-12-19 19
  • 19. 4.2 TPL (Task Parallel Library) Data Patitioning & Aggregate (PLINQ, Parallel.For()) Pipeline algorithm (Task.ContinueWith 등) 2011-12-19 20
  • 20. 4.2 TPL Samples - ShopFloor Manager v2.0 구조 참고: https://svn.realweb21.com/svn/project/2009/KIMM-MES/trunk Master Data Connection MES DB SynchronizationContext UI Update Data Uploader Asnynchronous IO MainUI ShopFloor Gauges/Charts Manager Acquisition Data Collection Event-Driven 방식 RFID Reader Barcord Reader IO Board 1. Asnynchronous IO 2. Board 별 모든 센서 Scanning 통신 3. Producer-Consumer 기법 2011-12-19 21
  • 21. 2. ICON SET Task Groups Computer Server Sub Process Bullet Subprocess 1 Task Groups Groups End 2011-12-19 22
  • 22. 감사합니다 Copyright 2008 Realweb co., Ltd. All rights reserved.