Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C++/ggjae #46

Merged
merged 3 commits into from
Jul 13, 2021
Merged

C++/ggjae #46

merged 3 commits into from
Jul 13, 2021

Conversation

ggjae
Copy link
Collaborator

@ggjae ggjae commented Jul 9, 2021

변경 사항

Issue 참고 : Note Status Check

  1. 멀티스레드 프로그래밍이란?
  2. 프로세스와 스레드 Review, 병렬 프로그램이란?
  3. 멀티스레드 프로그래밍이 힘든 이유 및 경쟁 상태 코드 추가

Point of discussion

조금씩 더 중요하다고 생각하는 부분들을 이번 PR에 꾸준히 추가시켜 보겠습니다. 문서가 김에 따라 수정하면서 다양한 의견이나 피드백을 받고싶어서 먼저 PR을 작성하게 되었습니다. 피드백에 대한 리뷰는 달게 받겠습니다!

Reference

https://github.com/ggjae/unreal-play/tree/main/multithread

Copy link
Collaborator

@Hee-Jae Hee-Jae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

대부분 OS에서 봤던 내용들이네요. 앞으로 나오게 될 C++의 멀티스레드 프로그래밍을 이해하기 위한 좋은 빌드업이라고 생각합니다.

Copy link
Collaborator

@JuseobJang JuseobJang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Data Race라는 말은 또 처음 듣는 용어네요~ OS에서 중요한 개념들 이론 뿐만 아니라 실제 코드로도 볼 수 있어서 좋았습니다~ ㅎㅎ

Copy link
Collaborator

@yoongoing yoongoing left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

윈도우에서의 스레드는 처음 알게되었네요 수고하셨습니다!

@ggjae
Copy link
Collaborator Author

ggjae commented Jul 11, 2021

Data Race라는 말은 또 처음 듣는 용어네요~ OS에서 중요한 개념들 이론 뿐만 아니라 실제 코드로도 볼 수 있어서 좋았습니다~ ㅎㅎ

감사합니다! 아마 운영체제에서 Race Condition이라고 많이 들어보셨을 것 같아요~~!

Copy link
Owner

@Seogeurim Seogeurim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

프로세스와 스레드에 대해 게임, C++ 언어로 살펴보니 모르는 점도 많이 들어오고 새롭네요 ! 유익한 글 감사합니다 ㅎㅎ

## 프로세스

운영체제가 관리하는 프로그램의 단위
실행파일을 실행하는 것이 곧 프로세스를 만드는 것. 실행파일의 실행은 운영체제가 파일을 읽어서 메모리에 복사해두고 시작 주소로 점프하는 것. 멀티코어가 아니더라도 여러개의 프로그램이 동시에 실행된다.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멀티 코어가 아니더라도 여러 개의 프로그램이 동시에 실행된다 -> 멀티 코어가 아닐 경우 시분할, 스케줄링 등을 통해 실제로는 동시에 실행되지 않지만 동시에 실행되는 것처럼 보이도록 한다고 알고 있는데 혹시 맞나용 ?

Copy link
Collaborator Author

@ggjae ggjae Jul 12, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그렇죠. 단일 CPU에서 실행되는 것은 하나의 명령어로 한 프로그램이지만, '시분할' 을 통해서 시간을 잘게 분할하여 여러 응용프로그램이 돌아가는 것 처럼 보이고, '멀티태스킹'이란 기술로 여러개가 동시에 실행되는 것 처럼 보이게 만들죠.
제가 말한 '멀티코어가 아니더라도 여러개의 프로그램이 동시에 실행된다는 것'은 메모리에 적재되어 있는 프로세스들이 진행되고 있음을 이야기합니다.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하 이해했습니다 !!
'멀티태스킹'에 대해서도 정확히 찾아보니 하나의 CPU가 여러 프로세스를 스케줄링을 통해 마치 동시에 실행하는 것과 같은 환경을 제공하는 것을 말하네요. 아래 자료에서 말하는 '멀티프로세서'는 멀티 코어를 말하는 걸까요?

image

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음.. 제 생각에는 '다수의 CPU를 내장한 컴퓨터'라서 이 문맥에서의 '멀티프로세서'는 CPU가 2개 이상인 컴퓨터를 뜻한다고 생각합니다. 멀티 코어라함은 한 CPU가 여러개의 코어를 가지고 있는것을 이야기하구요. 아마 여기서는 '코어'의 개념보다는 한 CPU에서 여러 멀티태스킹이 진행되고, 여러 CPU에서는 여러개와 여러개가 합친 멀티태스킹이 가능하다고 설명하는 것 같아요 :)

Copy link
Owner

@Seogeurim Seogeurim Jul 13, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 이해했습니다 ! 멀티프로세서랑 멀티코어의 차이점도 알게되었네요 !! 자세한 설명 감사합니다 잘 기억해두겠습니다 ㅎㅎ !!

Comment on lines +73 to +76
## 성능을 위하여 멀티스레드 프로그래밍을 하는가?

정답은 아니다. 게임은 성능이 중요하기 때문에 상관은 있지만 게임이 느리거나, 프로그램이 느리다면 성능 개선이 우선시 되어야 한다. 다양한 자료구조와 알고리즘을 통해서 성능개선을 진행해야 하고 최후의 보루로 멀티스레드 프로그래밍을 진행하여야 한다.
**주의** 멀티스레드 프로그래밍을 하면 더 느려질지도 모른다.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멀티스레드 프로그래밍을 하면 더 느려지는 이유는 무엇인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용하는 스레드가 많아지면 많아질수록 bottleneck의 가능성과, 쓰레드마다 참조하는 캐시가 다르므로 불일치 문제가 생기거나, 스레드 하나만으로도 진행할 수 있는 간단한 코드를 여러 스레드로 진행시켜도 race condition을 기다리기 위해 시간이 사용되거나 합니다! 적재적소에 사용하여야 하는 것이지요.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 !! 그래서 프로그램 성능 개선이 우선된 후, 멀티 스레드 프로그래밍은 다양한 위험성을 고려하여 적절하게 사용해야하는 것이군요. 이해했습니다 ! 감사합니다 ㅎㅎ

Comment on lines 151 to 154
2. 코드 상 스레드의 개수와 코어의 개수는 일치하지 않아도 상관이 없는 이유?

> 프로세스가 시분할로 돌아가면서 실행되듯 스레드도 시분할로 운영되어 중간에
다른 스레드가 실행될 수 있다.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이것이 무슨 뜻인지 조금 더 풀어서 설명해주실 수 있나요 ~?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예시로, 최근 컴퓨터의 CPU들은 쿼드코어들을 많이 채택하고 있죠? 쿼드코어라면 스레드가 네개만 존재할 수 있을까요?라는 쉬운 의도의 질문이였습니다! 코어는 CPU 내 물리적 연산부이고, 스레드는 작업(연산) 단위이므로 코어 개수로 스레드의 개수를 예측할 수 없다.의 뜻이였는데 살짝 답변을 추가해보겠습니다 (__)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제가 질문에 '코드 상' 이라는 이야기를 해서 조금 이해하기 힘든 것 같네요. 이 '코드 상'이라는 단어를 제거하겠습니다 :)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하 생각보다 쉬운 의도의 질문이었네요 ! 이해했습니다 !! 감사합니다 ㅎㅎ

Copy link
Collaborator

@KimKwon KimKwon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굉장히 어렵군요,,,,,
게임 업계에서는 멀티스레드 프로그래밍에 대한 높은 이해도가 요구되나봐요
화이팅입니다 👍

@Seogeurim Seogeurim self-requested a review July 11, 2021 17:52
Comment on lines +155 to +156
3. 멀티스레드 프로그래밍을 진행했을 때 싱글스레드 프로그래밍보다 느려졌다. 그 이유는 무엇일까?
> 사용하는 스레드가 많아지면 많아질수록 bottleneck의 가능성과 쓰레드마다 참조하는 캐시가 다르므로 불일치 문제가 생기거나 스레드 하나만으로도 진행할 수 있는 간단한 코드를 여러 스레드로 진행시켜도 race condition을 기다리기 위해 시간이 사용되곤 한다. 적재적소에 사용하여야 한다.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😆 😆 😆

@Seogeurim Seogeurim merged commit ed4b318 into main Jul 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants