CPU의 프로세서, 컴퓨터에서 일을 하는 녀석이다.
싱글 코어는 한명이 컴퓨터에서 일을 하고 있는 것이다. => 그래서 동시에 두개의 일을 하지 못한다.
하지만 우리의 앱은 음악 실행, 크롬 실행 등 여러 작업들을 동시에 할 수 있다!
한 명이 일을 하지만 이것을 매우매우매우 빠르게 번갈아가면서 일을 해서 우리가 보기에는 동시에 실행되고 있는 것처럼 느껴지는 것이다.
하지만 빠르게 계산할 수는 있지만 발열이 심해서 cpu가 타버리는..현상이 발생했다.
그래서 하나의 코어 성능을 높이는 것보다는 두 개 이상의 코어끼리 통신하는 것에 집중하기 시작했다. 두명한테 시켰을 때 더 빠르게 계산하고 비용도 절감하게끔..
1코어 2스레드라고 하면, 물리적인 코어는 한개지만 밖으로 보이는 코어는 두개처럼 보이는 것이다.
결론, 코어는 물리적인 cpu의 프로세서이고, 스레드는 하이퍼스레딩기술을 이용하여 실제로는 하나지만 두 개의 코어처럼 보여지는 논리적인 cpu인 것이다.
= 작업들을 어떻게 다른 스레드에서 실행시킬 수 있을까와 같다.
알아서 ios가 스레드를 찾아서 분산시킨다. 큐는 선입선출이어서 먼저 들어온 작업들이 먼저 배치된다. 하지만 먼저 배치된 작업이 먼저 끝나는 것은 아니다.
ios에서는 방법이 GCD, Operation 이렇게 두 가지가 있다.
우리는 대기열 큐에 넣기만 하면 ios가 알아서 스레드를 생성하여 작업을 분산 처리한다!
=> 오래걸리는 작업들이 다른 쓰레드에서 비동기적으로 동작하게 해준다.
DispatchQueue.global().async { }
dispatchqueue라고 하고, 클로저로 묶을 수 있는 여러 개의 간단한 작업을 다룰 때 사용한다. (함수 위주)
GCD기반으로 만들어진 기술이다. + 여러가지 기능. 취소, 순서 지정, ..
클래스로 만들어진 객체이다.
operation queue라고 한다. 복잡한 일에 사용, 데이터와 기능을 캡슐화한 객체 개념이다. (?)
작업을 메인스레드에서 대기열로 보낼 때 알아서 다른 스레드로 작업을 보내게 되는데, 작업을 보낸 시점에서 즉시 리턴하는 개념이 비동기이다.
작업이 완료되는 것을 기다리지 않고 그 다음작업을 처리할 수 있는 것이다.
일을 시작만 시키고 끝날 때까지 안 기다리는 것!
=> 그래서 1번 스레드가 다른 일처리를 할 수 있다!
DispatchQueue.global().async { }
반대로 원래 작업이 진행되던 메인 스레드에서 다른스레드로 작업을 보내고, 일이 끝날 때까지 기다리고 있는 것이다.
DispatchQueue.global().sync { }
그런데 이렇게 짜면 사실 의미가 없어지기 때문에 실질적으로는 메인쓰레드에서 일을 하게 된다.
어떤 일을 할때 한 명에게 일을 시키면 한번에 한가지의 일만 할 수 있기 때문에 그 한명이 일을 끝내기까지 기다리는 것은 시간도 오래 걸리고 매우 비효율적이다. (동기적)
그래서 여러명에게 일을 나눠준다면 더 효율적이게 일을 처리할 수 있다.
스레드에 적용하면,
메인스레드에만 할당되었던 일을 여러 스레드에 분배하면 메인 스레드 포함 다른 스레드들도 동시에 일을 할 수 있다.
이것이 동시성 프로그래밍이라고 한다.
동시성 프로그래밍은 동시에 실행되는 것처럼 보이는것을 말한다. 싱글코어에서 멀티 스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 스레드를 번갈아 가면서 실행되는 방식이다. 논리적 개념.
큐의 특성.
직렬큐는 단하나의 스레드로만 보내는 대기열이다.
동시큐는 여러 스레드로 분산처리를 하는 것이다.
반면 동시큐는 독립적이지만 중요도나 작업이 유사한 여러개의 작업을 처리할 때 사용한다.
뭔말?
데이터 받아와서 화면에 보여주는 셀 하나하나의 작업들..