라이징캠프 iOS 11기 4주차 개발일지(1)

Ryu_jin·2022년 11월 25일
0
post-thumbnail

4주차 개발일지

Thread

❗️스레드 = 흐름

  • Single Thread -> 하나의 흐름으로 표현
  • Multi Thread -> 동시성
  1. 동기적이나 비동기적으로 일을 처리하고 싶을 때 사용
  2. 쉽게 얘기하자면 일을 대신 수행해주는 그런 일종의 작업자
  3. 스레드를 받으면 각자의 흐름이 생긴다
  4. 스레드 부여 -> 독립성 생김, 단점: 관리가 힘듬

Single Thread

  • 순차실행 -> 여러 작업들이 있어도 하나의 흐름으로 진행된다

Multi Thread

  • 병렬실행 -> 여러가지 작업들을 동시에 실행한다

❗️ 멀티 스레드의 경우 '임계구역'을 조심해야한다!!!!

Queue

⭐️ 선입선출(FIFO) 구조

  • Serial Queue -> 하나의 작업이 끝나야 그다음 작업이 시작된다
let serialQueue = DispatchQueue(label: "label")

serialQueue.sync{

}
  • Main dispatch queue -> main thread에서 task를 실행하며 전역적으로 사용 가능한 serial queue
DispatchQueue.main.sync {

}
  • Concurrent -> 동시에 작업하지만 큐이므로 앞 task가 먼저 서비스를 받는다.
    • 하지만, 앞 task의 완료 여부에 상관없이 동시에 task를 실행한다.

let CQueue = DispatchQueue(label: "label", attributes: .concurrent)
  • Global dispatch queue -> iOS에서 동시성 프로그래밍을 하기 위함
DispatchQueue.global().async {
		
}
  • qos = quality of service = 순서
DispatchQueue.global(qos: .userInteractive) {}  //Main Queue
DispatchQueue.global(qos: .userInitiated) {}    //유저가 시작한 작업, 유저가 응답을 기다림
DispatchQueue.global(qos: .default) {}          //userInitiated와 utility의 중간
DispatchQueue.global(qos: .utility) {}          //시간이 걸리며 즉각적인 응답이 필요하지 않은 경우
DispatchQueue.global(qos: .background) {}       //눈에 보이지 않는 부분의 작업. 완료 시간 중요X
DispatchQueue.global(qos: .unspecified) {}
//우선순위 순 

메인스레드를 이용한 동시성 화면 전환

@IBOutlet weak var firstView: UIView!
    @IBOutlet weak var secondView: UIView!
    
    let colorList: [UIColor] = [ .red, .blue, .systemPink, .brown, .purple, .cyan, .darkGray, .black ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // TODO: - thread 주기
        
        // main -> UI 담당
        
        // Frist view
        DispatchQueue.global().async {
            
            for color in self.colorList {
                
                DispatchQueue

async(비동기) 와 sync(동기)

  • sync는 이전 스레드가 끝날 때까지 기다린다
  • async는 다른 큐에 스레드를 추가하고 동시에 다른 작업을 할 수 있다.
    • async는 동시에 처리되기 때문에 스레드의 순서가 섞인다
    • main thread가 진행 되어지고 있는 Task1 과 별개로 다른 thread에서 Task2를 진행

Concurrent(동시) 와 Serial(직렬)

  • Queue(대기열)로 보내진 작업들을 여러개의 스레드로 보낼 것인지 한개의 스레드로 보낼 것인지

Main 과 Global

  • Main -> UI 담당 스레드 : ui 업데이트 흐름
  • Global -> 전반적인 흐름
profile
Empire

0개의 댓글