Enviar búsqueda
Cargar
A4 thread blockingisevil
•
5 recomendaciones
•
1,105 vistas
NAVER D2
Seguir
Tecnología
Salud y medicina
Denunciar
Compartir
Denunciar
Compartir
1 de 99
Descargar ahora
Descargar para leer sin conexión
Recomendados
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
The Future of Everything
The Future of Everything
Michael Ducy
[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
NAVER D2
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
NAVER D2
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
NAVER D2
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
NAVER D2
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
NAVER D2
Recomendados
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
The Future of Everything
The Future of Everything
Michael Ducy
[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
NAVER D2
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
NAVER D2
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
NAVER D2
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
NAVER D2
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
NAVER D2
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
NAVER D2
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
NAVER D2
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
NAVER D2
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
NAVER D2
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
NAVER D2
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
NAVER D2
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
NAVER D2
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
NAVER D2
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
NAVER D2
[213] Fashion Visual Search
[213] Fashion Visual Search
NAVER D2
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
NAVER D2
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
NAVER D2
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D2
[231] Clova 화자인식
[231] Clova 화자인식
NAVER D2
[232]TensorRT를 활용한 딥러닝 Inference 최적화
[232]TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
NAVER D2
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
[241] AI 칩 개발에 사용되는 엔지니어링
[241] AI 칩 개발에 사용되는 엔지니어링
NAVER D2
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
NAVER D2
Más contenido relacionado
Más de NAVER D2
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
NAVER D2
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
NAVER D2
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
NAVER D2
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
NAVER D2
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
NAVER D2
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
NAVER D2
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
NAVER D2
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
NAVER D2
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
NAVER D2
[213] Fashion Visual Search
[213] Fashion Visual Search
NAVER D2
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
NAVER D2
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
NAVER D2
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D2
[231] Clova 화자인식
[231] Clova 화자인식
NAVER D2
[232]TensorRT를 활용한 딥러닝 Inference 최적화
[232]TensorRT를 활용한 딥러닝 Inference 최적화
NAVER D2
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
NAVER D2
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
NAVER D2
[241] AI 칩 개발에 사용되는 엔지니어링
[241] AI 칩 개발에 사용되는 엔지니어링
NAVER D2
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
NAVER D2
Más de NAVER D2
(20)
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[213] Fashion Visual Search
[213] Fashion Visual Search
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
[231] Clova 화자인식
[231] Clova 화자인식
[232]TensorRT를 활용한 딥러닝 Inference 최적화
[232]TensorRT를 활용한 딥러닝 Inference 최적화
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
[222]누구나 만드는 내 목소리 합성기 (부제: 그게 정말 되나요?)
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
Old Version: [211] 인공지능이 인공지능 챗봇을 만든다
[241] AI 칩 개발에 사용되는 엔지니어링
[241] AI 칩 개발에 사용되는 엔지니어링
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
[246]QANet: Towards Efficient and Human-Level Reading Comprehension on SQuAD
A4 thread blockingisevil
1.
Thread Blocking Is
Evil 게임네트웍컴포넌트팀 김준현
2.
Thread Blocking
3.
Non-Blocking
& 순차적 코드 작성
4.
Why does Multi-Thread
matter?
5.
“The Free Lunch
is OVER.” Herb Sutter December 2004
6.
Clock speed Execution optimization Cache
7.
Hyperthreading Multicore Cache
8.
Write Multithreaded
Application
9.
MULTI THREAD
10.
CONCURRENCY
11.
하지만 현실은?
12.
줄을 서서 기다린다
13.
도대체 왜?
14.
Thread Blocking
15.
Starvation
Deadlock
16.
Starvation
17.
Task A
Task B 1: Lock 1: Sleep 1msec 2: Sleep 2msec 3: Unlock
18.
19.
Deadlock Hold &
Wait
20.
Thread A
Thread B 1A: Lock 1B: Lock 2A: Request 2B: Send Response 3A: Wait for Response 3B: Unlock 4A: Do something with Response 5A: Unlock
21.
Thread A
Thread B 1A: Lock 1B: Lock 2A: Request 2B: Send Response 3A: Wait for Response 3B: Unlock 4A: Do something with Response 5A: Unlock
22.
My Problem
23.
로비-룸 형태의 게임을
제작
24.
Remote Procedure Call
25.
처리 로직을 함수
단위로 짜기 때문에 개발이 쉽다
26.
방 입장 RPC
인증 RPC Game Client Room Lobby
27.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 방 입장 RPC 인증 RPC 처리 로직 처리 로직 인증 RPC 반환 방 입장 RPC 반환
28.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 방 입장 RPC 인증 RPC 처리 로직 처리 로직 인증 RPC 반환 방 입장 RPC 반환
29.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 Lobby 응답 지연 방 입장 RPC 인증 RPC 처리 로직 처리 로직 인증 RPC 반환 방 입장 RPC 반환
30.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 Lobby 응답 지연 방 입장 RPC 인증 RPC 처리 로직 처리 로직 Room서버 throughput 방 입장 RPC 반환 인증 RPC 반환 저하
31.
악의 축은?
32.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 Thread Blocking 인증 RPC 반환 방 입장 RPC 반환
33.
RPC의 태생적 한계
34.
처리 로직을 함수
단위로 짜기 때문에 개발이 쉽다
35.
처리 로직을 함수
단위로 짜기 때문에 찢을 수 없다
36.
RPC::Result* JoinRoom(…) {
… RPC::Result answer = RPC::SyncCall(“VerifyLobbyUserToken”, …); …. return result; }
37.
우리가 원하는 것
38.
RPC의 장점인 순차적 코드
작성 Non-Blocking
39.
가능한 해결책은?
40.
RPC 이원화
41.
방 입장 요청
RPC 인증 요청 RPC Game Client Room Lobby 방 입장 응답 RPC 인증 응답 RPC
42.
Non-Blocking O
방 입장 요청 RPC 인증 요청 RPC Game Client Room Lobby 방 입장 응답 RPC 인증 응답 RPC 순차적 코딩 X
43.
RPC 이원화
44.
Thread Pool 분리
45.
Room
방 입장 RPC 인증 RPC Game Client TP#1 Lobby TP#2 기타 RPCs
46.
순차적 코딩 O
Room 방 입장 RPC 인증 RPC Game Client TP#1 Lobby TP#2 기타 RPCs Non-Blocking X
47.
Thread Pool 분리
48.
이대로 끝인 거야?
49.
Solution
50.
Asynchronous Programming
51.
Request(callback, …)
52.
Pros: Non-Blocking
53.
Cons: Can’t Write Sequential
Code Can’t Use Stack Variable Can’t Split Programming Construct …
54.
어렵다!
55.
이대로 끝인 거야?
56.
Coroutine
57.
Similar to Thread
58.
Line of Execution
59.
Stack
& Local Variable
60.
But
61.
Non-preemptive
62.
Instruction: Yield Yield Break Resume
63.
Coroutine을 제공하는 언어는?
64.
C#
Erlang Haskell JavaScript(since 1.7) Lua Perl Python(since 2.5) Ruby …
65.
C++은?
66.
67.
손수 구현해야 한다
68.
Windows: Fiber Linux: getcontext/setcontext makecontext swapcontext
69.
Asynchronous Programming
+ Coroutine
70.
Non-Blocking
& 순차적 코드 작성
71.
Solution
for Starvation
72.
Task A
Task B 1: Lock 1: Sleep 1msec 2: Sleep 2msec 3: Unlock
73.
Task A
Task B Thread A 1: Sleep 1msec 1: Create & Resume Coroutine 2: Request Lock 3: Yield Non-Blocking Thread A‟ 4: Resume 5: Sleep 2msec 6: Yield Break 7: Unlock Sequential Code
74.
75.
76.
Solution
for Deadlock Hold & Wait
77.
Thread A
Thread B 1A: Lock 1B: Lock 2A: Request 2B: Send Response 3A: Wait for Response 3B: Unlock 4A: Do something with Response 5A: Unlock
78.
Thread A
Thread B 1A: Lock 1B: Lock 2A: Create & Resume Coroutine 2B: Send Response 3A: Request 3B: Unlock 4A: Yield Non-Blocking 5A: Unlock Thread A‟ (invoked by response) 6A’: Lock 7A’: Resume 8A’: Do something with response 9A’: Yield Break 10A’: Unlock Sequential Code
79.
Solution
for My Problem
80.
Game Client
Room Lobby 방 입장 RPC 호출 인증 RPC 호출 Thread Blocking 인증 RPC 반환 방 입장 RPC 반환
81.
룸 Thread
로비 서비스 1R: 인증 요청 1L: 인증 요청 처리 2R: 인증 응답 대기 2L: 인증 응답 보내기 3R: 방 입장 처리
82.
룸 Thread
로비 서비스 1R: Create & Resume Coroutine 1L: 인증 요청 처리 2R: 인증 요청 2L: 인증 응답 보내기 3R: Yield Non-Blocking 룸 Thread‟ (invoked by response) 4R’: Resume 5R’: 방 입장 처리 6R’: Yield Break Sequential Code
83.
Request & Wait Request
& Yield
84.
RPC의 장점인 순차적 코드
작성 Non-Blocking
85.
Coroutine (Fiber)
User-mode Scheduling Kernel-mode Scheduling Thread CPU CPU CPU CPU
86.
RPC Coroutine
Execution Pool Thread Pool RPC Task Queue Network I/O Thread Pool
87.
Network I/O
RPC Task RPC Execution Coroutine Thread Queue Thread Pool Network Event task enqueue task dequeue acquire coroutine coroutine RPC start Execution yield return Network resume Event task resume enqueue task dequeue resume yield break release coroutine pooling
88.
Network I/O
RPC Task RPC Execution RPC Execution Coroutine Thread Queue Thread 1 Thread 2 Pool Network Event task enqueue task dequeue acquire coroutine coroutine RPC resume Execution yield return Network resume Event task resume enqueue task dequeue resume yield break release coroutine pooling
89.
RPC::Result* JoinRoom(…) {
… RPC::Result answer = RPC::SyncCall(“VerifyLobbyUserToken”, …); …. return result; }
90.
RPC::Result* JoinRoom(…) {
… RPC::Result answer = RPC::SyncCallYield(“VerifyLobbyUserToken”, …); …. return result; }
91.
T P S
쓰래드 갯수
92.
Wrap-up
93.
“The free lunch
is OVER.” Write Multithreaded Application CONCURRENCY
94.
Thread Blocking is
Evil Starvation Deadlock
95.
Asynchronous Programming
+ Coroutine
96.
Non-Blocking
+ Writing Sequential Code
97.
Request & Wait Request
& Yield
98.
Inspired by
Jeffrey Richter ‘Simplified APM With The AsyncEnumerator’
99.
완벽함이란 더 이상 추가할
것이 없을 때가 아니라 더 이상 버릴 것이 없을 때 완성된다. „성당과 시장‟에서
Descargar ahora