작성
·
366
0
강의를 듣던 도중 동기 , 비동기, 직렬, 동시 에 개념에 대해서 질문이 생겼습니다.
직렬의 경우 그림으로 표현해 주셨던 것처럼
다른 하나의 쓰레드에서 task를 순서에 따라 전부 다 처리한다고 이해했는데,
제가 이해한 것이 맞다면,
동기 방식으로 직렬 테스크를 처리했을 때 굳이 다른쓰레드로 테스크를 넘기는 것이 의미가 있나요? 비동기라면 해당 테스크를 직렬로 처리하더라도 동시에 다른 테스크를 진행할 수 있다고 생각하지만 동기처리의 경우 결국 메인쓰레드에서 진행하는 것과 같은 수준의 처리시간이 들고 오히려 쓰레드를 바꾸는데에 대한 리소스만 더 사용하게 되는것은 아닌가요??
라는 의문이 들었습니다..!
답변 1
0
네 수훈 님 맞습니다.
동기(sync) / 직렬 (serial)이 의미가 없지 않나? 라고 질문을 주셨는데, 정확하게 맞습니다.
앞으로 앱을 더 많이 만들어보시거나,
여러가지 코드를 구글링해서 찾아보시면 많이 느끼시겠지만,
실제로 동기(sync)로 사용하는 경우도 거의 보지 못하실 꺼예요.
동기 자체가 실질적으로 다른 쓰레드로 보내는 게 의미가 없기 때문에
(동기로 처리하면) 내부적으로도 운영체제가 그냥 본래의 쓰레드에서 처리합니다.
(어짜피 일을 다른 쓰레드에서 시키고 해당 일을 끝낼때 까지 기다리는 것이 의미가 없기에.. 그냥 자기 쓰레드에서 처리하는 것과 별반 다르지 않기에 그냥 처리합니다.)
그래서, 개념적으로 동기/비동기를 설명드린 것이지만, 실제로 비동기 프로그래밍에 대해서
우리가 잘 이해해야 하는 개념은 비동기 프로그래밍입니다. (async)
(실제 코드에서도 거의 대부분의 경우에 비동기 async만 사용하게 됩니다. 우리가 이 단원에 대해서 배우는 목적 자체가 비동기를 이해하고 사용하기 위해서예요.)
그동안 비동기 프로그래밍의 개념없이, 컴퓨터는.. 코드의 순서대로 한줄 한줄 처리하는 줄로만 알았지만, 실제 내부적으로는 CPU(쓰레드)는 여러개이고, 이런 여러개의 CPU를 사용해서 코딩하는 경우가 흔한 데 (비동기 프로그래밍을 이용하는 경우가 흔한데..) 이 것을 개념적으로 정리해드리고 있는 것입니다.
감사합니다.
궁금했던 부분 정확히 말씀해주셨습니다 감사합니다!