SlideShare a Scribd company logo
1 of 47
Download to read offline
ProActor
    charsyam@naver.com
Event
Handler
I/O HANDLER
POLYMORPHISM
I/O HANDLER
   Event Handler

HTTP
I/O HANDLER
   Event Handler

HTTP   SMTP
I/O HANDLER
   Event Handler

HTTP   SMTP   Custom   LOG
Wrong
First Seen
Reactor And Proactor
ONE Protocol
Variable EVENTS
요렇게 I/O HANDLER
생각합니다.

    Event Handler

LOGIN    CHAT   ATTACK   TRADE
I/O HANDLER
    Event Handler
GAME    OTHER   OTHER    OTHER

LOGIN   CHAT    ATTACK   TRADE
I/O HANDLER
    Event Handler
           PROTOCOL PARSING LAYER
GAME    OTHER    OTHER     OTHER

LOGIN   CHAT    ATTACK    TRADE
Reactive
Proactive
Reactive
어떤 이벤트에 반응하는
Proactive
상황에 앞서서 주도하는
Reactor
 Model
Single Thread
                            No Sync Mechanism
                 Event
      Execute   Handler   일반적인 Reactor 의 장점을
                 Event         가져갂다.
Reactor         Handler
                 Event
                          특정 Event Handler 가 작
                Handler   업이 오래걸리면 다른 Handler
                              에 영향을 준다.
Single Thread Demultiplexer
              Multi-Thread Dispatcher
                    Multi-Thread
  Reactor                            Producer-Consumer
                        Event       Half-Sync, Half-Async
                                       Leader-Follower
Push                   Handler          Active Object
                        Event
   Queue               Handler
           POP          Event
                                          동기화 필요
                       Handler          Deadlock 조심
Single Thread
                              동기화가 필요 없다.
               Event
              Handler
                        일반적인 Reactor 의 장점을 가져갂다.
               Event
Reactor       Handler
               Event
              Handler   특정 Event Handler 가 작업이 오래걸
                         리면 다른 Handler 에 영향을 준다.
Proactor
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
Requirement
              데이터가
 미리 요청!                블록 되면 안됨
              없으면?


                         Active
  뉘신지?        완료 통보!
                       Object 필요


              관련
Future/ACT              미리 요청!
             작업 처리
선수 과목
Future/ACT
Active Object
Future/ACT
푸드코트에서 미리 선결재 하고 햄버거
  나오기 전에 영수증 받아두는 것
 누구의 주문인지 알 수가 있습니다.
Active
Object
능동적인
Object?
독립적인 실행
     Thread
     Process
다시
Proactor
ACE: Proactor
 Boost::ASIO
Proactor
Benefit
Proactor
   Benefit
Reduce Memory Copy
Proper Thread Control
Reactor/Proactor
구분 말고 아키텍처를
   잘 만들자!
THANK YOU!

More Related Content

More from DaeMyung Kang

How to use redis well
How to use redis wellHow to use redis well
How to use redis wellDaeMyung Kang
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashingDaeMyung Kang
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache keyDaeMyung Kang
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash DaeMyung Kang
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better EngineerDaeMyung Kang
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_finalDaeMyung Kang
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offsetDaeMyung Kang
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lakeDaeMyung Kang
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service ArichitectureDaeMyung Kang
 
Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)DaeMyung Kang
 

More from DaeMyung Kang (20)

Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Number system
Number systemNumber system
Number system
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service Arichitecture
 
Bloomfilter
BloomfilterBloomfilter
Bloomfilter
 
Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)Redis From 2.8 to 4.x(unstable)
Redis From 2.8 to 4.x(unstable)
 

Proactor