작성
·
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
안녕하세요 앨런님! (아니 도대체 인프런은 글씨 크기를 어떻게 키우는걸까요..🤔)
물리 스레드라고 설명주신 개념이 생소해서 조금 공부해봤더니, 제가 생각한건 “1 코어 = 1 물리스레드” 이라고 가정하고 질문 드린거였네요. 그래서 저는 싱글 코어에서는 여러 논리스레드가 할당될 때 무조건 멈춤 현상이 발생하고, 멀티 코어에서는 동일 코어에 여러 논리 스레드가 할당될때 멈춤 현상이 발생한다고 생각했어요.
하지만 하이퍼스레딩 개념이 등장함에 따라 하나의 코어에 여러 개의 물리 스레드가 존재할 수 있게 되었고, 따라서 우선 순위에 밀려 task 가 멈출 수 있는 상황을 ‘여러개의 논리 스레드가 동일한 코어에 몰려있는가’로 판단하는 것보다, ‘동일한 물리 스레드에 몰려있는가’로 판단하는 것이 더 정확하겠군요.
조만간 강의 내용도 업데이트 된다니 그 내용도 기대하고 있겠습니다!
감사합니다 :)
1
안녕하세요 수진 님!
1. 네네 정확하게 맞습니다.
싱글코어에서 쓰레드 객체가 여러개 있거나, 아니면 멀티코어에서도 한개의 물리적인 쓰레드에서 여러개의 (소프트웨어적인)쓰레드 객체를 만들 수 있으니.. 그런경우에 해당하는 그런 상황입니다. 멀티코어에서 각 쓰레드 객체가 실제 물리적인 쓰레드 위에서 따로 존재한다면 이런 일은 발생하지 않을 것 같습니다. :)
(레이웬더리치에서 사용하는 예였는데... 예를 위한 예? 정도라고 생각하시면 좋을 것 같습니다.^^ 어짜피 OS에서 GCD 및 쓰레드를 관리하니.. 우리가 관리할 수 있는 영역 밖의 일이라.. 어쩌면 지극히, 이론적으로 그런 일이 발생할 수 있다 정도로만 생각하시면 되시지 않을까 합니다. :))
(그리고 사실 제 강의에서 물리적인 쓰레드와 소프웨어적인 쓰레드객체의 차이에 대해서 자세하게 말씀드리지 않았어서.. ㅠ 당연히 헷갈리실 수도 있을 것 같네요ㅠ.. 이런 해당 내용 포함/ 또 런루프에 대한 얘기/async/await도 좀 포함해서 사실 강의 내용을 좀 업데이트를 예정 중인데ㅠ 1달반에서 2달내에 강의 내용을 조금 업데이트 예정 중입니다.. ^^)
2. 네 맞습니다!
해당 일을 빨리 끝내기 위해서, GCD내부에서 우선순위의 뒤바뀜을 자동적으로 (어느정도) 알아서 해결한다는 내용인데요. 후에 들어온 작업의 수준으로 원래의 작업의 수준을 높인다고 합니다! 해당 예에서, 제가 큐를 userInteractive큐로 가정했으니, 그 수준으로 올라가게 된다는 것이었습니다. ^^
어쨌든, 그럼에도 불구하고 공유된 자원을 사용하는 일/가능성이 있다면 처음부터 Qos수준을 동일한 수준으로 처리하는게 개발자로써 올바른 접근법이라는게 우선순위의 뒤바뀜 문제를 해결하는 방법이라고 말씀드린 것이고요!
궁금한 점이 해결되시길 바라며..ㅎㅎ
감사합니다. :)