μλ
νμΈμ Fomaπ μ
λλ€!
μ€λ μ°λ λλ₯Ό κ³ μ(?)μ²λΌ μ΄μ©νκΈ° μν κΈ°λ³Έ μ§μμΈ λκΈ°μ λΉλκΈ° κ·Έλ¦¬κ³ μ§λ ¬κ³Ό λμμ λν΄μ
μ 리ν΄λ³΄λλ‘ νκ² μ΅λλ€.
λ°λ‘ μμν κ²μ~
Sync(λκΈ°)
λκΈ°μ λ»μ λ§ κ·Έλλ‘ λμμ μΌμ΄λλ€λ λ»μ λλ€.
μ΄ λ» λλ¬Έμ λ ν·κ°λ¦¬κΈ°λ νλλ°μ.
λκΈ°λ‘ μμ μ νμλ λμμ μΌμ΄λμ§ μκ³ μ°¨λ‘λλ‘ μΌμ΄λμ£ ?
κ·Έλ¬λ©΄ λλ체 λκ° λμμ μΌμ΄λλ€λ κ²μΌκΉμ?
λ°λ‘ μμ²κ³Ό μλ΅μ λλ€.
κ·Έλ¬λκΉ "λ΄κ° μ΄κ±° νλΌκ³ μ§μνμΌλ©΄ λλΌλκΉμ§ μ무κ²λ νμ§λ§! μμ²μ νμΌλ©΄ λμμ μλ΅ν΄!" μ΄λ° λ»μ΄μ£ ..
μΌλ°μ μΈ μ½λλ₯Ό μμ±ν λ©΄ μμ±ν μμλλ‘ νΈμΆλμ£ ?
μλ¬΄λ° μΈν μ ν΄λμ§ μμ κ²½μ° λ³΄ν΅ λκΈ°λ‘ μμ μ΄ μ§νλ©λλ€.
func μμ
1() {
print("μμ
1 μμ")
Thread.sleep(forTimeInterval: 3)
print("μμ
1 λ")
}
func μμ
2() {
print("μμ
2 μμ")
Thread.sleep(forTimeInterval: 2)
print("μμ
2 λ")
}
func μμ
3() {
print("μμ
3 μμ")
Thread.sleep(forTimeInterval: 1)
print("μμ
3 λ")
}
μμ
1()
μμ
2()
μμ
3()
//μμ
1 μμ
//μμ
1 λ
//μμ
2 μμ
//μμ
2 λ
//μμ
3 μμ
//μμ
3 λ
μ΄μ μ μμ μ΄ μ무리 μ€λκ±Έλ €λ λλ λκΉμ§ λ€μ μμ μ΄ μ§νλμ§ λͺ»νμ£ .
Async(λΉλκΈ°)
λκΈ°μ λ°λλ‘ λμμ μΌμ΄λμ§ μλ κ²μ΄κ² μ£ ?
μμμ λκΈ°λ μμ²κ³Ό μλ΅μ΄ λμμ μΌμ΄λλ κ²μ΄λΌκ³ νμ΅λλ€.
λΉλκΈ°λ μμ²κ³Ό μλ΅μ΄ λμμ μΌμ΄λμ§ μμλ λ©λλ€.
μμ²μ νλ©΄ μ¦μ μλ΅μ νλ κ²μ΄ μλλΌ μλ΅μ λμ€μ νκ±°λ μλλ©΄ μλ΅μ΄ λμ§ μμ μλ μμ΅λλ€.
κ·Έλ¬λκΉ "λ μ΄ μμ λͺ»ν΄λ λλκΉ μΌλ¨ ν΄λ΄ κ·Έλ¦¬κ³ λλλ©΄ μλ €μ€" λΌκ³ μ§μλ₯Ό νλ κ²μ΄μ£ .
let queue1 = DispatchQueue(label: "1")
let queue2 = DispatchQueue(label: "2")
let queue3 = DispatchQueue(label: "3")
func μμ
1() {
print("μμ
1 μμ")
Thread.sleep(forTimeInterval: 3)
print("μμ
1 λ")
}
func μμ
2() {
print("μμ
2 μμ")
Thread.sleep(forTimeInterval: 2)
print("μμ
2 λ")
}
func μμ
3() {
print("μμ
3 μμ")
Thread.sleep(forTimeInterval: 1)
print("μμ
3 λ")
}
queue1.async {
μμ
1()
}
queue2.async {
μμ
2()
}
queue3.async {
μμ
3()
}
μλμ κ°μ΄ μκ°μ΄ μΌλ§λ 걸리λ λμμ μμμ νκ³ μμ μ΄ λΉ λ₯Έ μμΌλ‘ λλκ² λ©λλ€.
κ·Όλ° μ λ μ΄λ° μλ¬Έμ΄ μκΈ°λλΌκ΅¬μ.
μλ μ½λμ²λΌ μ€νν΄λ "λΉλκΈ°λκΉ λͺ¨λ μμμ΄ λκ³ μμ μ΄ λΉ λ₯Έ μμΌλ‘ λλκ² λμΌνλκ±° μλκ°?"
DispatchQueue.main.async {
μμ
1()
}
DispatchQueue.main.async {
μμ
2()
}
DispatchQueue.main.async {
μμ
3()
}
νμ§λ§ κ²°κ³Όλ λκΈ°μ²λΌ μλν©λλ€.
μ μ΄λ κ² κ²°κ³Όκ° λμ¬κΉμ?
λ°λ‘ 보ν΅μ κ²½μ° νκ° μ§λ ¬λ‘ μ€μ λμ΄ μκΈ° λλ¬Έμ΄μ£ .
Serial(μ§λ ¬)
κ·Έλ λ€λ©΄ μ§λ ¬μ 무μμ μλ―Έν κΉμ?
μμ°¨μ μΌλ‘ μ§ννλ€λ κ²μ λλ€.
κ·Όλ° μ¬κΈ°μ μ λκΈ°λ ν·κ°λ¦¬λλΌκ΅¬μ.
"λκΈ°λ‘ μμ μ μ§νν΄μΌ μμ°¨μ μΌλ‘ μ§νλλκ±° μλμΌ? λΉλκΈ°λ‘ μμ νλ©΄ λλλ μκ°μ΄ λ€ λ€λ₯΄κΈ° λλ¬Έμ μμ°¨μ μ΄μ§ μμκ±°μμ."
"κ·Έλ¬λ©΄ μ§λ ¬μ΄ λκΈ°κ³ λ³λ ¬μ΄ λΉλκΈ° μλκ°?"
λΌκ³ μκ°νμμ΅λλ€...
νμ§λ§ μμ°¨μ μΌλ‘ μ§ννλ€λ λ§μ "μμ "λ€μ μμ°¨μ μΌλ‘ μ§ννλ€λ κ²μ λλ€.
μ΄λ κ² λ§νλ©΄ μ΄ν΄νκΈ° νλμ€κ±°μμ..
κ·Έλ¬λκΉ λκΈ°λ‘ μμ ν μλ μκ³ λΉλκΈ°λ‘ μμ ν μλ μκ² μ£ ?
"μ΄λ€ λ°©μμΌλ‘ μμ ν΄λ μκ΄μλλ° λμ μ°¨λ‘μ°¨λ‘ ν΄!" λΌλ κ²μ΄μ£ .
μμμ λ³Έ μ½λλ₯Ό 보면 λΉλκΈ°λ‘ λ μμ μ΄ 3κ° μμ΅λλ€.
νμ§λ§ λΉλκΈ°λ‘ λλ λκΈ°λ‘ λλ κΈ°λ³ΈμΈ μ§λ ¬νμ λ΄κ²¨μκΈ° λλ¬Έμ μ°¨λ‘μ°¨λ‘ νΈμΆλλ κ²μ΄μ£ !
//μμ
1
DispatchQueue.main.async {
μμ
1()
}
//μμ
2
DispatchQueue.main.async {
μμ
2()
}
//μμ
3
DispatchQueue.main.async {
μμ
3()
}
μ΄κ²μ νμμ μλ μμ λ€μ λ»νλ κ²μ΄μ§ λ€λ₯Έ μ°λ λμ μ€νλλ μμ μ μλ―Ένλ κ²μ μλμμ.
μ΄λ κ² κ°κ° queue1,queue2,queue3 λ€λ₯Έ νμμ λ€λ₯Έ μ°λ λλ‘ λμνλ€λ©΄ λΉλκΈ°λ‘ λͺ¨λ νλ²μ μμν μ μλκ²μ΄μ£ .
queue1.async {
μμ
1()
}
queue2.async {
μμ
2()
}
queue3.async {
μμ
3()
}
Concurrent(λμ)
λ§ κ·Έλλ‘ λμμ μμ μ μ§ννλ€λ λ»μ λλ€.
μ§λ ¬μ μμ°¨μ μΌλ‘ "μμ "λ€μ μ§ννλ€λ©΄ λμλ μ λ§ λμμ μμ μ μ§νν©λλ€.
λμλ‘ λ νλ₯Ό λ§λ€κΈ° μν΄μ attributesμ .concurrentλΌκ³ μ€μ ν΄μ£Όμλ©΄ λ©λλ€.
let concurrentQueue = DispatchQueue(label:"ConcurrentQueue1",attributes: .concurrent)
...
concurrentQueue.async {
μμ
1()
}
concurrentQueue.async {
μμ
2()
}
concurrentQueue.async {
μμ
3()
}
//μμ
1 μμ
//μμ
2 μμ
//μμ
3 μμ
//μμ
3 λ
//μμ
2 λ
//μμ
1 λ
μ μ½λλ₯Ό μ€νν΄λ³΄λ©΄ κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€.
ν μμ μλ μμ λ€μ λμμ μ€νν΄λ²λ¦¬λ κ²μ΄μ£ .
κ·Έλ λ€λ©΄ λμνλ₯Ό λκΈ°λ‘ μ€νμν€λ©΄ μ΄λ»κ² λ κΉμ?
μ μ μμμ λκΈ°μ λΉλκΈ° λͺ¨λ λκ°μ κ²°κ³Όκ° λμ¬μ€ μμμ΅λλ€.
"λκΈ°λ λΉλκΈ°λ λμμ μμ μ νλ μμλ λκ°μμΌ λμ§ μμκΉ?"
λΌκ³ μκ°νμ΅λλ€.
concurrentQueue.sync {
μμ
1()
}
concurrentQueue.sync {
μμ
2()
}
concurrentQueue.sync {
μμ
3()
}
//μμ
1 μμ
//μμ
1 λ
//μμ
2 μμ
//μμ
2 λ
//μμ
3 μμ
//μμ
3 λ
νμ§λ§ κ²°κ³Όλ μ§λ ¬νμμ λκΈ°λ‘ μ€νν κ²μ΄λ λκ°μμ΅λλ€.
λμμ μμ μ μ€ννλ€κ³ ν΄λ μ€κ°μ λκΈ°λ‘ λ μμ μ΄ μμΌλ μμ²μ λν μλ΅μ νκ³ κ·Έ λ€μμΌλ‘ μ€νλλ κ² κ°μ΅λλ€.
μ 리
λκΈ°μ λΉλκΈ°λ κ° μ°λ λμ μμ μ λν μμ²μ λμμ μλ΅ν κ²μ΄λ μλλλ₯Ό μλ―Ένλ€.
μ§λ ¬κ³Ό λμλ ν μμ μλ μμ λ€μ μμ°¨μ μΌλ‘ μ§νν κ²μ΄λ λμμ μ§νν κ²μ΄λλ₯Ό μλ―Ένλ€.
μ¦,λΉλκΈ°λ‘ μμ λλλΌλ μ§λ ¬ν μμ μν΄ μμΌλ©΄ μμ°¨μ μΌλ‘ μ€ννκ³ ,
λμν μμμ λμμ μμ μ΄ μ€νλλλΌλ λκΈ°λ‘ λ μμ μ΄ μμΌλ©΄ μμ²μ λν μλ΅μ λλ΄κ³ λ€μ μμ μΌλ‘ λμ΄κ°λ€.
'π₯ Computer Science > Operating System' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] μ»΄νμΌκ³Ό λ§ν¬ κ·Έλ¦¬κ³ λΉλμ μ€νμ μ°¨μ΄λ?(Differences Build,Complile,Run and Link) (0) | 2021.06.02 |
---|
λκΈ