Page 31 -
P. 31

컨텍스트 스위치를 하는 데 연산량이 많다 보니, 동시에 실행해야 하는 스레드가 여럿이라 하더라
                    도 컨텍스트 스위치를 지나치게 자주 하면 배보다 배꼽이 더 커지기도 합니다. 그림 1-19와 같이
                    컨텍스트 스위치 구간이 너무 잦으면 정작 T1과 T2를 실행하는 데 할애되는 시간은 그만큼 적습                             1

                    니다. 이는 비효율적이라고 할 수 있습니다.                                                          멀티스레딩

                       그림 1-19 컨텍스트 스위치

                                      <T1 Stack>               <T2 Stack>
                                        Func3                    Func3
                                        Func2                    Func2
                                        Func1                    Func1

                                            저장                복원




                               T1 스레드            컨텍스트 스위치          T2 스레드



                    컨텍스트 스위치를 자주 할수록 성능이 안 좋아진다고 하니, 그렇다면 컨텍스트 스위치를 최대

                    한 덜하면 되지 않을까요? 하지만 이것도 문제가 될 수 있습니다. 앞서 언급했던 ‘로딩 중에 애니
                    메이션을 뿌리는’ 경우를 봅시다. 컨텍스트 스위치가 어떤 스레드를 일시 정지하고 다시 컨텍스트
                    스위치로 실행을 마저 진행하는 데 걸리는 시간이 1초라면, 로딩 중에 애니메이션은 1초에 한 번

                    밖에 실행되지 못합니다. 사람 입장에서는 갑갑하겠죠.
                    그렇습니다. 컨텍스트 스위치 실행은 기본적으로 ‘사람 입장에서 쾌적할 수 있는’ 가급적 긴 시간
                    단위로 이루어집니다. 이 시간 단위를 타임 슬라이스(time slice)라고 합니다. 운영체제나 CPU 같은

                    환경에 따라 다르지만, 보통 스레드 하나가 일시 정지했다 다시 시작하는 데까지 걸리는 시간은
                    약 5밀리초입니다. 사람 입장에서는 갑갑함을 느끼지 않을 만큼 짧은 시간이지만, 컴퓨터 입장에
                    서는 초당 5억 개의 명령어를 처리할 수 있는 CPU라면 5억   5밀리초 = 250만 개의 명령어를 처
                                                                  *
                    리할 수 있는 시간입니다. 충분히 긴 시간이죠.
                    CPU가 2개고 스레드가 2개면 어떻게 될까요? 이론적으로는 컨텍스트 스위치를 전혀 할 필요가
                    없습니다. 실제로는 다른 외부 요인들 때문에 컨텍스트 스위치가 발생하기는 해도요. 여기서 우리

                    가 알아야 할 점은 바로 CPU 개수와 스레드 개수의 관계입니다.

                    CPU 개수와 스레드 개수가 같거나 스레드 개수가 더 적으면 컨텍스트 스위치가 발생할 이유가
                    없습니다. 하지만 스레드 개수가 더 많으면 컨텍스트 스위치가 반드시 어느 CPU 안에서는 발생
                    합니다. 비둘기 집의 원리로 표현하자면, 비둘기 집 = CPU, 비둘기 = 스레드가 되겠습니다.

                                                                                                  039
   26   27   28   29   30   31   32   33   34   35   36