• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

안녕하세요 선생님 Task 에 대해서 또다시 질문드립니다

21.02.12 15:15 작성 조회수 235

1

Task t = new Task(ThreadMain);

t.Start(); // 쓰레드 풀에 있던 쓰레드를

이용해서 일감을 받아서 실행 

Thread.Sleep(1000);// 메인 쓰레드가 잠든다. 

위 코드는 선생님에서 수업시간에 하셧던거 모르는 부분 발췌

한 것입니다.

Q1. 여기서 쓰레드 풀을 따로 생성하지 않으셨는데 설명

하실때 쓰레드 풀에 있던 쓰레드를 이용해서 일감을 받아서 

실행 한다고 하셨습니다.

-> 현재 코드에는 쓰레드풀을 생성하시지 않으셨고

(앞전 수업처럼 쓰레드풀 MIN,MAX 함수 써서 쓰레드 풀의

쓰레드는 최소 몇개 최대 몇개 설정 하심)

그냥 Task만 사용하셨습니다. 

그럼 디폴트 쓰레드 풀이 내장되어 있는 것입니까?

디폴트 쓰레드 풀이 있다고 한다면 그 쓰레드 풀은 쓰레드가

몇개가 대기중입니까?

Q2. 그 다음 줄에 메인 쓰레드가 잠드는 즉, TASK (일감)

-> ThreadMain함수를 실행하는 일감

을 맡은 쓰레드가 해당 함수를 실행할 시간을 벌기 위해서

Thread.Sleep(1000); 으로 메인 쓰레드를 재운다 라고

하셨는데

뒷 강의 에서도 Thread.Sleep과 yeild 이런 것이 나오는데

이놈들의 주체는 누구입니까?

메인 함수를 맡은 쓰레드를 메인 쓰레드라고 부르시는 것 같은

데, Main() 함수 내부에서 Thread.sleep을 사용하면

main함수 내부에서 사용했으니까 메인 쓰레드를 

재우는 것인가요????

어제 멀티 쓰레드 부분 쪽은 완강하고 네플 나가기 전에 

복습 하고 있는데 몇 개 헷갈린 부분이 있어서 질문드립니다

즐거운 설날 되세요 ~!!감사합니다 선생님

답변 2

·

답변을 작성해보세요.

1

Q1.
그럼 디폴트 쓰레드 풀이 내장되어 있는 것입니까?
-> C# .NET 프레임워크에서는 그렇습니다.  

디폴트 쓰레드 풀이 있다고 한다면 그 쓰레드 풀은 쓰레드가 몇개가 대기중입니까?
-> 그건 .NET 프레임워크마다 상이하기 때문에 크게 중요하지 않습니다.
(확인하려면 ThreadPool.어느함수~를 이용해서 확인은 가능하겠지만..)

Q2. 

Main() 함수 내부에서 Thread.sleep을 사용하면
main함수 내부에서 사용했으니까 메인 쓰레드를 재우는 것인가요????

-> 맞습니다!

부연설명을 드리자면, 원래 운영체제 커널 코드가 실행되면서
프로세스(실행중인 프로그램)한테 적절히 실행시간(timeslice)를 분배해줍니다.
가령 우리 서버가 0.3초 동안 실행할 권한을 받았다면 그 시간 동안 실행한 후
실행권을 반납하고 다른 프로세스가 실행되어야 하는데요.
Sleep, Yield 등을 사용하면 자기한테 할당받은 정당한 실행시간을 포기하고
커널 모드로 돌아가는 것입니다.
(누군가가 외부에서 와서 잠재우는 느낌은 아니고, 거꾸로 내가 수면에 빠지면서 종료되는..)

0

ZIOMIN님의 프로필

ZIOMIN

2021.12.17

감사합니다