iOS/UMC
[iOS] UMC iOS 세미나 6주 차
year.number
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() {
}