인프런 커뮤니티 질문&답변

sujinnaljin님의 프로필 이미지
sujinnaljin

작성한 질문수

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

3) Priority Inversion (우선 순위의 뒤바뀜)

우선순위 뒤바뀜 질문 드립니다

작성

·

188

1

안녕하세요 앨런님! 우선순위 뒤바뀜 강의에서 두가지정도...ㅎㅎ 궁금한 점이 있어서 질문 드립니다

1. 

우선 순위가 더 높은 task 가 들어올때 이전에 실행되고 있던 작업은 우선 순위에 밀려 잠시 멈추게 된다고 설명을 주셨는데, 이건 싱글 코어나, 각 스레드가 같은 코어에서 실행될때의 cpu 할당을 말씀주시는 걸까요?? 

멀티코어 환경에서 thread 2와 thread 3이 다른 코어에서 실행될때는, 우선 순위가 더 높은 task 가 들어오더라도 다른 task 가 멈추는 일은 일어나지 않겠죠..??? (사용해야하는 공유 자원이 겹치지 않는 이상..)

2.

5:40 쯤에  task 3 작업이 빨리 처리될 있도록 공유 자원을 점유하고 있는 task 1 우선순위를 높인다고 설명주셨고, ppt에는 해당 priority가 userInteractive 나와있습니다.

이때 높여지도록 설정된 값이 userInteractive 이유는 priority  (userInteractive ~ background) 가장 높은 값이어서가 아니라, task 3 priority userInteractive 때문에 이를 따라가는 것이 맞을까요?

감사합니다 :)

답변 2

1

sujinnaljin님의 프로필 이미지
sujinnaljin
질문자

안녕하세요 앨런님! (아니 도대체 인프런은 글씨 크기를 어떻게 키우는걸까요..🤔)

물리 스레드라고 설명주신 개념이 생소해서 조금 공부해봤더니, 제가 생각한건 “1 코어 = 1 물리스레드” 이라고 가정하고 질문 드린거였네요. 그래서 저는 싱글 코어에서는 여러 논리스레드가 할당될 때 무조건 멈춤 현상이 발생하고, 멀티 코어에서는 동일 코어에 여러 논리 스레드가 할당될때 멈춤 현상이 발생한다고 생각했어요.

하지만 하이퍼스레딩 개념이 등장함에 따라 하나의 코어에 여러 개의 물리 스레드 존재할 있게 되었고, 따라서 우선 순위에 밀려 task 멈출 있는 상황을여러개의 논리 스레드가 동일한 코어 몰려있는가 판단하는 것보다, ‘동일한 물리 스레드려있는가 판단하는 것이 정확하겠군요.

조만간 강의 내용도 업데이트 된다니 그 내용도 기대하고 있겠습니다! 

감사합니다 :)

1

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

안녕하세요 수진 님!

1. 네네 정확하게 맞습니다.

싱글코어에서 쓰레드 객체가 여러개 있거나, 아니면 멀티코어에서도 한개의 물리적인 쓰레드에서 여러개의 (소프트웨어적인)쓰레드 객체를 만들 수 있으니.. 그런경우에 해당하는 그런 상황입니다.  멀티코어에서 각 쓰레드 객체가 실제 물리적인 쓰레드 위에서 따로 존재한다면 이런 일은 발생하지 않을 것 같습니다. :)
(레이웬더리치에서 사용하는 예였는데... 예를 위한 예? 정도라고 생각하시면 좋을 것 같습니다.^^ 어짜피 OS에서 GCD 및 쓰레드를 관리하니.. 우리가 관리할 수 있는 영역 밖의 일이라.. 어쩌면 지극히, 이론적으로 그런 일이 발생할 수 있다 정도로만 생각하시면 되시지 않을까 합니다. :))

(그리고 사실 제 강의에서 물리적인 쓰레드와 소프웨어적인 쓰레드객체의 차이에 대해서 자세하게 말씀드리지 않았어서.. ㅠ 당연히 헷갈리실 수도 있을 것 같네요ㅠ.. 이런 해당 내용 포함/ 또 런루프에 대한 얘기/async/await도 좀 포함해서 사실 강의 내용을 좀 업데이트를 예정 중인데ㅠ 1달반에서 2달내에 강의 내용을 조금 업데이트 예정 중입니다.. ^^)

2. 네 맞습니다!

해당 일을 빨리 끝내기 위해서, GCD내부에서 우선순위의 뒤바뀜을 자동적으로 (어느정도) 알아서 해결한다는 내용인데요. 후에 들어온 작업의 수준으로 원래의 작업의 수준을 높인다고 합니다! 해당 예에서, 제가 큐를  userInteractive큐로 가정했으니, 그 수준으로 올라가게 된다는 것이었습니다. ^^

어쨌든, 그럼에도 불구하고 공유된 자원을 사용하는 일/가능성이 있다면 처음부터 Qos수준을 동일한 수준으로 처리하는게 개발자로써 올바른 접근법이라는게 우선순위의 뒤바뀜 문제를 해결하는 방법이라고 말씀드린 것이고요!



궁금한 점이 해결되시길 바라며..ㅎㅎ

감사합니다. :)

sujinnaljin님의 프로필 이미지
sujinnaljin

작성한 질문수

질문하기