ppt
테이블처럼 생간화면 - 테이블 뷰
만약 비동기처리를 하지 않았다고 가정하면 -> 테이블뷰를 스크롤 할때마다 버벅일 것이다.
왜 이런 현상이 일어날까?
아이폰의 주사율 60 (1초에 60번 다시 그린다.)
비동기 처를 하지 않으면 이런 매커니즘이 제대로 동작하지 못하게 만들기 때문에 화면이 버벅거린다.
1코어 - CPU가 한개
1스레드 - 계산기 같은 역할을 하는게 한개
1.0GHz - 1초에 10억번
물리적인 속도를 높이려고 진동의(클럭) 속도를 높이려고
하지만 발열,성능감소...
CPU를 두개 늘리면 안될까?
-> 2코어 2쓰레드
코어에 스레드를 늘림 (4코어 9쓰레드) - 스레드는 실제로 일을 하는 녀석
하이퍼쓰레딩 기술 (8쓰레드)
1코어에 2개의 쓰레드
8개의 물리적인 계산기가 있다. -> 8개의 코어가 있는 효과
물리적인 스레드가 현대의 컴퓨터에는 여러개가 있다.
기본적으로 1번 스레드에서 작업을 시작함 (메인스레드)
앱의 시작과 화면을 다시 그리는 원리 - 메인쓰레드의 역할 알아보기
유저가 앱의 아이콘 클릭 - main 함수 실행 - UIKit이 직접관리 UIApplication() 앱 객체 생성 -
Load main UI file (앱의 화면 준비) - 함수 실행(함수 실행)
최종적으로 앱의 실행
앱이 실행될때 Event Loop라는 개념은?
주로 runloop이라고 함 (앱을 관리하는 무한 반복문이 생성됨.)
runloop의 역할
앱이 실행중인 동안 무한 반복문이라는 녀석이 계속 끊임없이 돌면서
어떠한 이벤트들을 처리한다. (터치를 하거나, 핀치, 화면 가로.. 유저가 생성한 이벤트)
iOS 에서는 유저들의 행동을 식별함
어느 단위로 쪼개서 이걸 이벤트로 받아들인다.
이러한 이벤트를 main run loop (객체)에 던져준다.
이 반복문은 이벤트를 받아서 앱의 객체에 주면서 이벤트를 처리하게 된다.
버튼을 누르면 이 행위 하나를 이벤트 하나라 파악을 하고 main run loop에 던지는것.
무한 반복을 하면서 핸들링을 한다???
예시) 앱만들때 IBAction으로 버튼을 연결 했었다. 와 같이 버튼을 누르면 함수를 실행 시켜야 한다~ 로 연결되는것
어떤 함수를 실행해야 된다고 연결을 시키면, 그 함수가 동작하게 된다.
그 함수는 화면을 바꿔야 한다. -> 버튼을 누른 행위를 보여주기 위해서 어떤 함수를 실행 시켜야 함.
---> 이런걸 사이클 이라고 함.
무한 반복문이 함수를 계속 실행 시키고, 일처리를 한다음, 일처리 한것을 다시 화면에 그리는것. -> 이걸 1초에 60번 (60hz)
실제로 CPU는 1초에 35억번 일처리를 함
실제 화면을 다시 그리는 일은 1번스레드 (메인)에서 담담을함.
1번 스레드에 대해 집중적으로 파악
메인스레드는? NSThread라고 불리는 객체
화면을 1초에 60번 다시 그려야 하는 역할도 갖고 있다.
그렇기에 주기를 갖고 있다.
화면을 다시 그릴수 있으면, 화면이 버벅이지 않는다.
하지만 오래걸리는 작업은?
1초에 60번 화면을 다시 그려야 하는 역할도 하기 때문에 너무 오래걸리는 작업들을 시키면 안됨.
특히 네트워크 작업.
1번 쓰레드만이 아닌 2...3...4
분산처리를 어떻게 하는지에 대한 코딩 방법 -> 비동기처리 / 동시성 프로그래밍
네트워크 처리 대한 개념을 배우면서, 마주하게 되는 개념
iOS에서의 동시성을 처리하는 방법
작업을 대기행렬(큐)에 보내기만 하면, 우리의 OS가 알아서 여러쓰레드로 나눠서 분산처리를 한다
작업을 큐에 보내면 -> 큐에 작업이 쌓인다.
-> 알아서 다른스레드로 보내 분산처리를 하게 된다.
항상 선입선출 (FIFO)
엄밀히 말하면, 큐에 전체작업이 들어가는게 아님
큐에 들어오는 즉시 다른 스레드에 배치하게 된다.
스레드를 만든다?
고로, 우리가 할일은 작업을 큐로 보내기만 하면 된다.
DispatchQueue
대기열 개념을 이용해서 Os에서 알아서 스레드 숫자를 관리
메인쓰레드가 아닌 다른 스레드에서 오래걸리는 작업(네트워크 처리)들과 같은 작업들이 쉽게 비동기적으로 동작하도록 함.
OperationQueue (어려움)
병렬과 동시성의 개념
물리적인 Thread - 실제 물리적인 계산을 실행
실제 CPU에 붙어 있는 스레드
소프트웨어적인 Thread (앱단위) - 그냥 객체임
물리적인 스레드와 1대1 매칭이 아니다
물리적인 스레드가 1개 있어도 객체는(소프트웨어적 스레드 ) 1개 이상이 될수 있음.
Thread Pool - iOS에서 알아서 관리함.
병렬
물리적인 스레드에서 실제 동시에 일을 하는 개념
개발자가 신경쓸 필요가 없는 영역
동시성 (개발자가 신경써야 하는 개념)
메인 쓰레드가 아닌 다른 소프트웨어적인 쓰레드에서 동시에 일을 하는 개념