SlideShare a Scribd company logo
멀티쓰레드 프로그래밍과
   동기화 객체
   김성익 (noerror@hitel.net)
               2005.03.31
도입
• 멀티 테스킹, 멀티 쓰레드, 멀티 프로세
  서

• 멀티 쓰레드 프로그래밍 활용
• 싱글 쓰레드와 멀티 쓰레드의 차이
• 동기화 객체
멀티쓰레드
• 프로세스(Process)란 ?

• 쓰레드(Thread)란 ?

• 컨텍스트 스위칭    (Context Switching)
 쓰레드 레벨의 컨텍스트 스위칭, 프로세스 레벨의 컨
 텍스트 스위칭 차이
 컨텍스트 스위칭 비용, 메모리 공유
멀티쓰레드 프로그래밍
• 다수의 쓰레드를 동시에 활용하여 개발

• 병목 현상을 줄이고 효율을 높인다.
 컨텍스트 스위칭의 비용에도 불구하고 더 빠른 효율
 을 가지도록 접근
• 개별적인 작업을 동시에 한다.
 연관성이 없는 작업을 어렵게 끼워 맞출 필요가 없음
병목
• IO등의 작업으로 블록
  상태로 전이할 경우

• 예제
 극단적인 경우지만 Sleep 에
 해당하는 작업 동안에는 CPU는
 대기
 결과값은 약 2000.
병목 제거
• 멀티 쓰레드로 개선
 결과는 약1000.
사용 / 관련 함수
• CreateThread
 쓰레드를 생성 (beginthread과 같은 기능)
 주의)마지막 인자 NULL인 경우 98에서는 Fail
• TerminateThread
 쓰레드를 강제로 정지
 사용 지양 (자바는 초기 시절에만 존재)
• SetThreadPriority/GetThreadPriority
• WaitForSingleObject/MultipleObjects
• CloseHandle
컨텍스트 스위칭 조건
• 블럭모드로 진입(Sleep 함수, IO 작업)
 sleep(0) ??
 스케줄링 룰에 따라    (임의제어불가)
동기화 문제 (1)
• 멀티 쓰레드는 메모리 공유
동기화 문제(2)
• 쓰레드만 봤을 때는 논리적 오류가 없지
  만 컨텍스트 스위칭 일어난 시점에 따라
  치명적인 문제 발생
동기화 문제(3)
• 레지스터에 저장된 이전 값을 사용하는
  경우
동기화 처리
• 동기화 객체이용
동기화 객체
• 기능 : Enter/Leave

•   크리티컬 섹션 Critical Section
•   뮤텍스 Mutex
•   세마포어 Semaphore
•   이벤트 Event
크리티컬 섹션(1)
• 하나의 쓰레드만 통과 가능
 프로세스(process)간의 동기화에 사용 불가
• 다른 쓰레드가 사용중이면 블럭됨
 CPU를 다른 쓰레드로 넘김
• 커널 레벨의 객체가 아니라 빠르다
 뮤텍스, 세마포어등의 다른 객체에 비해서
• 한 쓰레드에서 여러 번 호출시 무시
 데드락을 막기 위함 ???
크리티컬 섹션(2)
• 사용




• 스핀락   spinlock
 멀티 프로세서 환경에서 빈번한 컨텍스트 스위칭을
 막기 위해 바로 스위칭 하지 않고 일정 카운트 만큼
 CPU가 대기
세마포어 (1)
• N개만큼 통과 가능
• Named Semaphore는 프로세스간의
  동기화 처리도 가능
• 쓰레드, 프로세스 무관하게 카운트
 한 쓰레드에서 모두 소유한 상태에서 다시 Enter 하
 면 데드락 (비교. 크리티컬섹션)
세마포어 (2)
• 사용흐름




• 초기 N에서 사용시 -1, 사용 후 +1 =>
  카운트가 0이면 대기 상태로
뮤텍스
• 카운트가 1인 세마 포어
• 사용흐름
이벤트(1)
• 시그널을 제어 할 수 있다
 근본적으로 Mutex, Shemapore와 다른점
 Mutex, Shemapore는 wait and signal이 무조
 건 자동, 이벤트는 수동 Reset이 가능하다
• IO 동기화 등에 사용됨
 시그널을 함수로 셋 가능한 특성 이용
이벤트(2)
• 수동 리셋 / 자동 리셋 방식
• 자동시그널 사용흐름 (mutex 유사)




• 수동시그널
 흐름을 외부에서 제어하는 데 주로 사용
데드락
• 동기화 객체에서 대기하지만 영원히 대
  기하게 되는 경우
 같은 쓰레드에서 사용중인 동기화 객체를 다시 통과
 하려고 할 때 영원히 통과할 수 없는 경우
 서로 다른 쓰레드에서 상대 객체를 대기하면서 기다
 리는 경우


• 논리적 오류
응용
• N개의 read 허용하며, write시는 하나
  만 가능하고, 이때 read 는 불가능
결론
• 멀티 쓰레드에서의 동기화의 까다로움
• 동기화의 문제는 쉽게 발견되지 않음
• 그럼에도 불구하고 효율을 높일 수 있다
  면?

More Related Content

PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PDF
이승재, 실시간 HTTP 양방향 통신, NDC2012
PDF
임태현, 서버점검 제로에의 도전, NDC2011
PDF
자바 네트워크 소녀 Netty 리뷰
PDF
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
PDF
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
PDF
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
PPTX
스마트폰 온라인 게임에서 고려해야 할 것들
서버 아키텍처 이해를 위한 프로세스와 쓰레드
이승재, 실시간 HTTP 양방향 통신, NDC2012
임태현, 서버점검 제로에의 도전, NDC2011
자바 네트워크 소녀 Netty 리뷰
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
스마트폰 온라인 게임에서 고려해야 할 것들

What's hot (20)

PDF
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
DOC
Java rmi 개발 가이드
PDF
NDC12_Lockless게임서버설계와구현
PDF
테라로 살펴본 MMORPG의 논타겟팅 시스템
PDF
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
PPTX
프라우드넷 사용법 훑어보기
PDF
임태현, MMO 서버 개발 포스트 모템, NDC2012
PDF
Node-express 채팅 서버 개발기
PPTX
암호화 이것만 알면 된다.
PPTX
Network 초보자를 위한 Netty
PDF
컴퓨터 네트워크와 인터넷
PPTX
게임 분산 서버 구조
PDF
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
PDF
백승엽, M2프로젝트의 오류보고시스템, NDC2010
PPTX
Ndc14 분산 서버 구축의 ABC
PDF
서버 개발자가 되기 위한 첫 걸음
PPTX
Windows system - memory개념잡기
PDF
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
PDF
서버성능개선 류우림
PPTX
서버 아키텍쳐 입문
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Java rmi 개발 가이드
NDC12_Lockless게임서버설계와구현
테라로 살펴본 MMORPG의 논타겟팅 시스템
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
프라우드넷 사용법 훑어보기
임태현, MMO 서버 개발 포스트 모템, NDC2012
Node-express 채팅 서버 개발기
암호화 이것만 알면 된다.
Network 초보자를 위한 Netty
컴퓨터 네트워크와 인터넷
게임 분산 서버 구조
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
백승엽, M2프로젝트의 오류보고시스템, NDC2010
Ndc14 분산 서버 구축의 ABC
서버 개발자가 되기 위한 첫 걸음
Windows system - memory개념잡기
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
서버성능개선 류우림
서버 아키텍쳐 입문
Ad

Viewers also liked (7)

PDF
[243]kaleido 노현걸
PDF
Multithread pattern 소개
PPTX
[135] 우리 팀에서도 코드리뷰를 할 수 있을까 안오균
PDF
[145]5년간의네이버웹엔진개발삽질기그리고 김효
PDF
티켓몬스터를 위한 PHP 개발 방법
PDF
유연하게 확장할 수 있는 PHP 웹 개발 이야기
PDF
객체지향 개념 (쫌 아는체 하기)
[243]kaleido 노현걸
Multithread pattern 소개
[135] 우리 팀에서도 코드리뷰를 할 수 있을까 안오균
[145]5년간의네이버웹엔진개발삽질기그리고 김효
티켓몬스터를 위한 PHP 개발 방법
유연하게 확장할 수 있는 PHP 웹 개발 이야기
객체지향 개념 (쫌 아는체 하기)
Ad

Similar to 05_동기화_개요 (20)

PPTX
운영체제 Sig4
PDF
More Effective Python 3st (Multitask)
PPTX
동기화, 스케줄링
PPTX
Concurrent programming
PDF
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
PPTX
Thread programming
PDF
Concurreny programming
PPTX
운영 체제 Sig
PPTX
Linux programming study
PPTX
뇌자T etc.windows multi threading programming
PPTX
System+os study 3
 
PPTX
Free rtos seminar
PPTX
프로세스
PPTX
Visual C++10을 활용한 병렬 프로그래밍
PPTX
프로세스 관리
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PPTX
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
PPTX
Multi-thread : producer - consumer
PPTX
Windows via c/c++ 스터디9장
PPTX
파이썬 병렬프로그래밍
운영체제 Sig4
More Effective Python 3st (Multitask)
동기화, 스케줄링
Concurrent programming
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
Thread programming
Concurreny programming
운영 체제 Sig
Linux programming study
뇌자T etc.windows multi threading programming
System+os study 3
 
Free rtos seminar
프로세스
Visual C++10을 활용한 병렬 프로그래밍
프로세스 관리
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
Multi-thread : producer - consumer
Windows via c/c++ 스터디9장
파이썬 병렬프로그래밍

More from noerror (20)

PPTX
15_TextureAtlas
PPTX
11_웹서비스활용
PDF
NDC08_실시간비주얼그래프편집
PPTX
KCGS11_실시간 피사계 심도 렌더링 개선 기법
PDF
11_통계 자료분석 입문
PPTX
11_빠른 개발 가능한 레벨 편집 시스템
PPTX
11_SH를 이용한 실시간 투명 근사법
PDF
ICON08_게임 애니메이션 최적화 기법
PDF
08_Marching Cube Terrains
PDF
08_게임 물리 프로그래밍 가이드
PDF
08_플래시 맛보기
PDF
08_애니메이션고등학교 게임과 특강
PDF
08_Wxwidgets 소개
PDF
07_PhysX 강체물리 입문
PDF
07_스케일폼 소개
PDF
07_Visual Shader Editor
PDF
06_HDR 소개
PDF
06_게임엔진 활용팁
PDF
06_게임엔진구성
PDF
06_자동차물리입문(1)
15_TextureAtlas
11_웹서비스활용
NDC08_실시간비주얼그래프편집
KCGS11_실시간 피사계 심도 렌더링 개선 기법
11_통계 자료분석 입문
11_빠른 개발 가능한 레벨 편집 시스템
11_SH를 이용한 실시간 투명 근사법
ICON08_게임 애니메이션 최적화 기법
08_Marching Cube Terrains
08_게임 물리 프로그래밍 가이드
08_플래시 맛보기
08_애니메이션고등학교 게임과 특강
08_Wxwidgets 소개
07_PhysX 강체물리 입문
07_스케일폼 소개
07_Visual Shader Editor
06_HDR 소개
06_게임엔진 활용팁
06_게임엔진구성
06_자동차물리입문(1)

05_동기화_개요

  • 1. 멀티쓰레드 프로그래밍과 동기화 객체 김성익 (noerror@hitel.net) 2005.03.31
  • 2. 도입 • 멀티 테스킹, 멀티 쓰레드, 멀티 프로세 서 • 멀티 쓰레드 프로그래밍 활용 • 싱글 쓰레드와 멀티 쓰레드의 차이 • 동기화 객체
  • 3. 멀티쓰레드 • 프로세스(Process)란 ? • 쓰레드(Thread)란 ? • 컨텍스트 스위칭 (Context Switching) 쓰레드 레벨의 컨텍스트 스위칭, 프로세스 레벨의 컨 텍스트 스위칭 차이 컨텍스트 스위칭 비용, 메모리 공유
  • 4. 멀티쓰레드 프로그래밍 • 다수의 쓰레드를 동시에 활용하여 개발 • 병목 현상을 줄이고 효율을 높인다. 컨텍스트 스위칭의 비용에도 불구하고 더 빠른 효율 을 가지도록 접근 • 개별적인 작업을 동시에 한다. 연관성이 없는 작업을 어렵게 끼워 맞출 필요가 없음
  • 5. 병목 • IO등의 작업으로 블록 상태로 전이할 경우 • 예제 극단적인 경우지만 Sleep 에 해당하는 작업 동안에는 CPU는 대기 결과값은 약 2000.
  • 6. 병목 제거 • 멀티 쓰레드로 개선 결과는 약1000.
  • 7. 사용 / 관련 함수 • CreateThread 쓰레드를 생성 (beginthread과 같은 기능) 주의)마지막 인자 NULL인 경우 98에서는 Fail • TerminateThread 쓰레드를 강제로 정지 사용 지양 (자바는 초기 시절에만 존재) • SetThreadPriority/GetThreadPriority • WaitForSingleObject/MultipleObjects • CloseHandle
  • 8. 컨텍스트 스위칭 조건 • 블럭모드로 진입(Sleep 함수, IO 작업) sleep(0) ?? 스케줄링 룰에 따라 (임의제어불가)
  • 9. 동기화 문제 (1) • 멀티 쓰레드는 메모리 공유
  • 10. 동기화 문제(2) • 쓰레드만 봤을 때는 논리적 오류가 없지 만 컨텍스트 스위칭 일어난 시점에 따라 치명적인 문제 발생
  • 11. 동기화 문제(3) • 레지스터에 저장된 이전 값을 사용하는 경우
  • 13. 동기화 객체 • 기능 : Enter/Leave • 크리티컬 섹션 Critical Section • 뮤텍스 Mutex • 세마포어 Semaphore • 이벤트 Event
  • 14. 크리티컬 섹션(1) • 하나의 쓰레드만 통과 가능 프로세스(process)간의 동기화에 사용 불가 • 다른 쓰레드가 사용중이면 블럭됨 CPU를 다른 쓰레드로 넘김 • 커널 레벨의 객체가 아니라 빠르다 뮤텍스, 세마포어등의 다른 객체에 비해서 • 한 쓰레드에서 여러 번 호출시 무시 데드락을 막기 위함 ???
  • 15. 크리티컬 섹션(2) • 사용 • 스핀락 spinlock 멀티 프로세서 환경에서 빈번한 컨텍스트 스위칭을 막기 위해 바로 스위칭 하지 않고 일정 카운트 만큼 CPU가 대기
  • 16. 세마포어 (1) • N개만큼 통과 가능 • Named Semaphore는 프로세스간의 동기화 처리도 가능 • 쓰레드, 프로세스 무관하게 카운트 한 쓰레드에서 모두 소유한 상태에서 다시 Enter 하 면 데드락 (비교. 크리티컬섹션)
  • 17. 세마포어 (2) • 사용흐름 • 초기 N에서 사용시 -1, 사용 후 +1 => 카운트가 0이면 대기 상태로
  • 18. 뮤텍스 • 카운트가 1인 세마 포어 • 사용흐름
  • 19. 이벤트(1) • 시그널을 제어 할 수 있다 근본적으로 Mutex, Shemapore와 다른점 Mutex, Shemapore는 wait and signal이 무조 건 자동, 이벤트는 수동 Reset이 가능하다 • IO 동기화 등에 사용됨 시그널을 함수로 셋 가능한 특성 이용
  • 20. 이벤트(2) • 수동 리셋 / 자동 리셋 방식 • 자동시그널 사용흐름 (mutex 유사) • 수동시그널 흐름을 외부에서 제어하는 데 주로 사용
  • 21. 데드락 • 동기화 객체에서 대기하지만 영원히 대 기하게 되는 경우 같은 쓰레드에서 사용중인 동기화 객체를 다시 통과 하려고 할 때 영원히 통과할 수 없는 경우 서로 다른 쓰레드에서 상대 객체를 대기하면서 기다 리는 경우 • 논리적 오류
  • 22. 응용 • N개의 read 허용하며, write시는 하나 만 가능하고, 이때 read 는 불가능
  • 23. 결론 • 멀티 쓰레드에서의 동기화의 까다로움 • 동기화의 문제는 쉽게 발견되지 않음 • 그럼에도 불구하고 효율을 높일 수 있다 면?