티스토리 뷰

SSAC iOS

SeSAC 2021.10.30 (23)

chanoo 2021. 11. 1. 03:08
  • Program Process Thread

Process는 독립적인 메모리 공간을  가지고 있으며

최소 하나 이상의  Thread 를 가진다. 

Thread 는 Process 내에서 실행되는 하나의 작업 단위 이다. 

 

  • iOS의 Multi Thread 
Multi Thread 는 하나의 스레드에서 이루어지던 작업을 다른 스레드에서도 작업 할수 있도록
분산처리 하는 방법이다. 
동시에 작업을 처리하기 때문에 작업 속도가 빠르지만 어떤 작업이 먼저 끝날지 모르기때문에 
어떤 작업이 먼저 끝날지에 대한 순서를 알수 없다.

GCD (Grand Central Dispatch ) 로 처리 

멀티 코어 프로세서 시스템에 대한 응용 프로그램 지원을 최적화 하기 위해 Apple 에서 개발한 기술

 

Queue 의 종류

  • DispatchQueue: GCD 를 보통 Dispatch Queue 로 지칭
  • OperationQueue

Dispatch Queue 

비교적 간단하게 구현 가능, 클로져를 통해 작업단위 구성

종류 

1. global

DispatchQueue.global()

DispatchQueue.global  의 경우 Concurrent Queue(여러 스레드에 분산하여 처리)가 기본 

작업(Queue 의 Task 항목) 을 여러 스레드로 나눠 보냄 -> 동시 (Concurrent)

  ex. DispatchQueue.global().async, DispatchQueue.global().sync

  - 작업 순서에 대한 우선순위(Qos) 를 설정할수 있음

 

2.main

DispatchQueue.main 의 경우 Serial Queue(하나의 스레드에서 처리) 가 기본

작업을 여러 스레드로 분산 X, 메인 스레드(only one) 에서 처리 

UI 업데이트 시, 메인 스레드에 구현해야 함

  ex. DispatchQueue.main.async, DispatchQueue.global().sync

 

3.custom

커스텀으로 만듬

default : Serial 의 특성을 가진 Queue 

하지만 Concurrent Queue 가능 

Qos 설정 가능 

 

  • 동기(Synchronous) VS 비동기(Asynchronous)

1. 동기 

시작한 작업이 종료(한번에 하나의 작업만) 되어야 다음 작업 가능 

  - 작업순서가 보장됨

  - 어떤 작업이 진행중 -> 다음 작업은 대기 

 

결과의 순서가 중요한 경우! => 동기 코드로 작성 

 

2. 비동기

시작한 작업이 완료되지 않더라도(한번에 여러 작업 진행) 다음 작업 시작. 

  -  (중요) 작업이 먼저 실행되었다고 먼저 끝나는 것이 아님 

비동기가 효율적이라고 생각할수도 있지만, 작업 순서가 중요한 경우

비동기로 작성하면 개망. 

 

동기 코드가 모두 실행되고 난뒤 비동기 코드 실행 

  • calendar

calendar 은 시간의 시스템에 대한 정보를 요약. 

 

//1. 내일날짜 구하기
let calendar = Calendar.current
let tomorrow = calendar.date(byAdding: .day, value: 1, to: Date())
print(tomorrow)
		
//2. 이번주 월요일은? //var -> let 으로 바꾸면 왜 오류 나는지 struct class 관점에서 생각해보기
//calendar 은 struct 이니까 값을 복사해 옴 그럼 component 의 시간을 바꿔야 하는데 
//let 이면 변경이 안되니까 오류가 나는게 아닐지...
var component = calendar.dateComponents([.weekOfYear, .yearForWeekOfYear, .weekday], from: Date())
// weekday: 1: sunday ~ 7: saturday
component.weekday = 2

// timeZone 사용 (한국은 UTC +09)
var component2 = calendar.dateComponents([.weekOfYear, .yearForWeekOfYear, .weekday, .timeZone], from: Date())
		component2.timeZone = TimeZone(secondsFromGMT: 9)
		component2.weekday = 2
		let kormondayweek = calendar.date(from: component2)
		print(kormondayweek)
// 	  	결과: Optional(2021-11-01 00:00:00 +0000)
		
let mondayWeek = calendar.date(from: component)
print(mondayWeek)

 

 

 

'SSAC iOS' 카테고리의 다른 글

SeSAC 2021.11.02 (25)  (0) 2021.11.03
SeSAC 2021.11.01 (24)  (0) 2021.11.02
SeSAC 2021.10.27 (21)  (0) 2021.10.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함