ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] UMC iOS 세미나 6주 차
    iOS/UMC 2022. 10. 31. 23:14

     

    Thread

    (이야기 등의)가닥[맥락], 프로세스의 흐름, 프로세스의 내부에 속함, 프로세스의 시작과 종료 담당

    💡프로세스(실행 중인 프로그램) 개념도 필요!

     

     

    프로세스의 전반적인 구조

    프로그램 안에서 스레드들이 각자 역할을 정해서 분담 -> 수행

    하나의 프로세스 안에는 최소 1개의 스레드가 존재하게 된다.

     

     

     


    Multi-Thread

    일만 분배하고, 줄어들지는 않기 때문에 분배를 하기 전과 후의 걸리는 시간은 같음

    작업의 순서를 가질 수 있음 (ex. 파일 B를 다운받으려면 파일 A가 필요한 경우 작업의 순서 필요)

     

     

     

    Thread

    - 프로세스 내에서 실행되는 흐름의 단위
    - Multi-Thread를 통해 Thread들이 각각 독립적인 흐름을 가질 수 있음(일의 능률과는 거리가 멀다. 단순히 분배만 할 뿐)
    - 공유 자원에 동시 접근하여 생기는 문제를 방지하기 위해 Lock을 활용함

     

    Dispatch Queue를 활용해서 Multi-Thread를 구현할 수 있다!

     

     


     

    Main Thread: DispatchQueue.main -> Ui 작업

    background Thread: DispatchQueue.global() -> Ui 작업 외의 모든 작업

     

     

    //
    //  ViewController.swift
    //  Week5
    //
    //  Created by yeonsu on 2022/10/31.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
        
        @IBOutlet weak var firstView: UIView!
        @IBOutlet weak var secondView: UIView!
        
        var colorList: [UIColor] = [
            .blue,
            .brown,
            .clear,
            .cyan,
            .darkText,
            .gray,
            .lightText,
            .red,
            .yellow,
            .green
        ]
        
        override func viewDidLoad() {
            super.viewDidLoad()
            threadTest()
            colors()
        }
        
        func threadTest() {
            // DispatchQueue.main      // Ui 작업 관련
            
            // 단일 Thread. 1-10까지 출력
            // 일을 여러 개의 스레드로 나누어서 처리
            // 동기 방식(sync): Ui 외 모든 작업 관련, 차례대로 수행
            
            // 비동기 (async): 다른 작업의 스레드가 끝나는 걸 기다리지 않고 같이 수행, 실행할 때마다 처리 순서가 달라짐
            /*
            DispatchQueue.global().async {
                for i in 1...10 {
                    print(i)
                    sleep(1)
                    
                }
            }
            
            DispatchQueue.global().async {
                for i in 11...10 {
                    print(i)
                    sleep(1)
                }
             */
            
            DispatchQueue.global().async {
                for color in self.colorList {
                    DispatchQueue.main.sync {
                        self.firstView.backgroundColor = color
                    }
                    sleep(1)
                }
            }
            
            DispatchQueue.global().async {
                for color in self.colorList.reversed() {
                    DispatchQueue.main.sync {
                        self.secondView.backgroundColor = color
                    }
                    sleep(1)
                }
            }
        }
    }
    
    func colors() {
    }

     

     

    'iOS > UMC' 카테고리의 다른 글

    [iOS] UMC iOS 세미나 7주 차  (0) 2022.11.07
    [iOS] 6주 차 미션  (0) 2022.11.05
    [iOS] 4-5주 차 미션  (0) 2022.10.31
    [iOS] UMC iOS 세미나 5주 차  (0) 2022.10.31
    [iOS] UMC iOS 세미나 4주 차  (0) 2022.10.27
Designed by Tistory.