μΉμ 8. λΉ μλͺ μ£ΌκΈ° μ½λ°± μκ° μλ£!!
μ€νλ§ λΉμ κ°λ¨νκ² λ€μκ³Ό κ°μ λΌμ΄νμ¬μ΄ν΄μ κ°μ§λ€.
κ°μ²΄ μμ± β‘οΈ μμ‘΄κ΄κ³ μ£Όμ
μ€νλ§μ μμ‘΄κ΄κ³ μ£Όμ μ΄ μλ£λλ©΄ μ€νλ§ λΉμκ² μ½λ°± λ©μλλ₯Ό ν΅ν΄ μ΄κΈ°ν μμ μ μλ €μ£Όλ λ€μν κΈ°λ₯μ μ 곡νλ€. λν μ€νλ§ μ»¨ν μ΄λκ° μ’ λ£λκΈ° μ§μ μ μλ©Έ μ½λ°±μ μ€λ€.
μ€νλ§μ ν¬κ² 3κ°μ§ λ°©λ²μΌλ‘ λΉ μλͺ μ£ΌκΈ° μ½λ°±μ μ§μνλ€.
@PostConstruct
, @PreDestroy
μ λ
Έν
μ΄μ
μ§μν μ½μ΄μμ μ¬λ¬ μ€λ λλ₯Ό λΉ λ₯΄κ² κ΅μ°¨νλ©΄μ λμμ μ€νλλ κ²μ²λΌ 보μ΄λ κ².
λ΄κ° μ§κΈ TVλ₯Ό λ³΄κ³ μλ€κ³ κ°μ νμ.
κ·Έλ°λ° TVλ₯Ό 보λ λμ€ μΉ΄ν‘ μλμ΄ μΈλ Έλ€.
μ΄ λ λλ TVλ₯Ό λ³΄λ€ μΉ΄ν‘μ λ΅μ₯μ νκ³ , λ€μ TVλ₯Ό λ³΄λ€ μΉ΄ν‘μ νλ€.
μ΄κ±Έ κ³μ λ°λ³΅νλ©΄ λ€λ₯Έ μ¬λμ΄ λ΄€μ λ λμμ λ κ°μ§ μΌμ νλ κ²μ²λΌ 보μ΄μ§λ§, μ¬μ€ λλ TVλ₯Ό λ³Ό λ TVλ§ λ³΄κ³ , μΉ΄ν‘μ λ³Ό λ ν΄λν°λ§ λ³Έλ€.
μ¦, 짧μ μκ° λμ μλ€ κ°λ€ νλ©΄μ μΌμ μ²λ¦¬νλ€λ κ±°λ€.
(β μ£Όμ΄μ§ 짧μ μκ° λμ βν κ°μ§ μΌ(TV 보기)βμ μ²λ¦¬νκ³ λ€μ μκ°μ λ€λ₯Έ βν κ°μ§ μΌ(μΉ΄ν‘ νκΈ°)βμ μ²λ¦¬νλ€.)
Concurrency is about dealing with lots of things at once.
λμμ±μ ν λ²μ μ¬λ¬ κ°μ§ μΌμ λ€λ£¬λ€.
λ©ν°νμ€νΉμ λμμ±μ λ§μ‘±νλ€.
μ±κΈ μ½μ΄μμ, νλ‘μΈμ€μκ² μμ£Ό 짧μ νμ μ¬λΌμ΄μ€λ₯Ό μ£Όκ³ κ·Έ μκ° λμ λ²κ°μκ°λ©° μΌμ μνμν¨λ€. κ·Έλ κ² ν¨μΌλ‘μ¨ λ§μΉ λμμ μ¬λ¬ νλ‘κ·Έλ¨μ΄ μ€νλλ κ² κ°μ λλμ μ£Όλ κ²μ΄λ€.
2κ° μ΄μμ μ½μ΄μμ μ€μ λ‘ λμμ μ¬λ¬ μμ μ΄ μ²λ¦¬λλ κ².
μκΉ λμμ±μμ μ΄ μλ₯Ό λ€μλ©΄, λλ λͺΈμ΄ λ κ°μΈ μ¬λμ΄λΌκ³ κ°μ ν΄μΌ νλ€.
κ·Έλμ ν λͺΈμΌλ‘λ TVλ₯Ό λ³΄κ³ , λ€λ₯Έ ν λͺΈμΌλ‘λ μΉ΄ν‘μ νλ κ²μ΄λ€.
μ¦, μ§μ§ λ κ°μ§ μΌμ βλμμβ μ²λ¦¬νλ κ²μ΄λ€.
Parallelism is about doing lots of things at once.
λ³λ ¬μ±μ ν λ²μ μ¬λ¬κ°μ§ μΌμ νλ€.
λ³λ ¬ μ²λ¦¬(Parallel Processing)λ λμμ μ¬λ¬ κ°μ λͺ
λ Ήμ μ²λ¦¬νμ¬ μμ
μ λ₯λ₯ μ μ¬λ¦¬λ λ°©μμ λ§νλ€.
μ¬λ¬ κ°μ λͺ
λ Ήμ λμμ μ²λ¦¬νλ λ³λ ¬ μ²λ¦¬λ μ½μ΄κ° μ¬λ¬ κ°μΈ CPUλ λ¬Όλ‘ μ΄κ³ μ½μ΄κ° νλμΈ CPUμμλ μλ κ°λ₯νλ€.
λ³λ ¬ μ²λ¦¬ μ κ³ λ € μ¬ν
μνΈ μμ‘΄μ±μ΄ μμ΄μΌ λ³λ ¬ μ²λ¦¬κ° κ°λ₯νλ€.
κ° λͺ
λ Ήμ΄ μλ‘ λ
립μ μ΄κ³ μμ κ²°κ³Όκ° λ€μ λͺ
λ Ήμ μν₯μ λ―ΈμΉμ§ μμμΌ νλ€.
κ° λ¨κ³μ μκ°μ κ±°μ μΌμ νκ² λ§μΆ°μΌ λ³λ ¬ μ²λ¦¬κ° μλ§νκ² μ΄λ£¨μ΄μ§λ€.
κ° λ¨κ³μ μ²λ¦¬ μκ°μ΄ λ€μ₯λ μ₯νλ©΄ μμ μμ
μ΄ λ¨Όμ λλλλΌλ κ°μ₯ κΈ΄ μκ°μ΄ 걸리λ λ¨κ³μμ λ³λͺ© νμμ΄ λ°μνλ€.
μ 체 μμ
μκ°μ λͺ λ¨κ³λ‘ λλμ§ μ λ°μ Έλ³΄μμΌ νλ€.
λ³λ ¬ μ²λ¦¬μ κΉμ΄ Nμ λμμ μ²λ¦¬ν μ μλ μμ
μ κ°μλ₯Ό μλ―Ένλ€.
μ΄λ‘ μ μΌλ‘λ Nμ΄ μ»€μ§μλ‘ λμμ μμ
ν μ μλ μμ
μ κ°μκ° λ§μμ Έμ μ±λ₯μ΄ λμμ§ κ²μ΄λ€.
νμ§λ§ μμ
μ λ무 λ§μ΄ λλλ©΄ κ° λ¨κ³λ§λ€ μμ
μ μ΄λνκ³ μλ‘μ΄ μμ
μ λΆλ¬μ€λ λ° μκ°μ΄ λ무 λ§μ΄ κ±Έλ €μ μ€νλ € μ±λ₯μ΄ λ¨μ΄μ§λ€.
λ³λ ¬ μ²λ¦¬ κΈ°λ²
νμ΄νλΌμΈ(Pipeline)
νλμ μ½μ΄μ μ¬λ¬ κ°μ μ€λ λλ₯Ό μ¬μ©νλ κ²μ΄λ€.
κΈ°μ‘΄ λ°©μμμλ ν λͺ
λ Ήμ΄λ₯Ό μ²λ¦¬νκΈ° μν΄ λͺ
λ Ήμ΄ μ²λ¦¬ 4λ¨κ³(ν¨μΉ β ν΄μ β μ€ν β μ°κΈ°)λ₯Ό λͺ¨λ λ§μΉκ³ λ€μ λͺ
λ Ήμ΄λ₯Ό μ€ννμ§λ§, νμ΄νλΌμΈμμλ λͺ
λ Ήμ΄ μ²λ¦¬μ λ¨κ³λ§λ€ λ
립μ μΌλ‘ ꡬμ±νμ¬ κ° λ¨κ³κ° μ¬μ§ μκ³ λͺ
λ Ήμ΄λ₯Ό μ²λ¦¬ν μ μκ² νλ€.
μνΌμ€μΉΌλΌ(Super-Scalar)
νμ΄νλΌμΈμ μ²λ¦¬ν μ μλ μ½μ΄λ₯Ό μ¬λ¬ κ° κ΅¬μ±νμ¬ λ³΅μμ λͺ
λ Ήμ΄κ° λμμ μ€νλλλ‘ νλ€.
μ€λλ μ CPUλ λλΆλΆ μνΌμ€μΉΌλΌ κΈ°λ²μ μ¬μ©νκ³ μλ€.
μνΌνμ΄νλΌμΈ(Super-Pipeline)
νμ΄νλΌμΈμ κ° λ¨κ³λ₯Ό μΈλΆνμ¬ ν ν΄λ‘ λ΄μ μ¬λ¬ λͺ
λ Ήμ΄λ₯Ό μ²λ¦¬ν μ μλ€.
ν ν΄λ‘ λ΄μ μ¬λ¬ λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ λ€μ λͺ
λ Ήμ΄κ° λΉ λ₯Έ μκ° μμ μμλ μ μμ΄ λ³λ ¬ μ²λ¦¬ λ₯λ ₯μ΄ λμμ§λ€.
μνΌνμ΄νλΌμΈ μνΌμ€μΉΌλΌ(Super-Pipelined Super-Scalar)
μνΌνμ΄νλΌμΈ κΈ°λ²μ μ¬λ¬ κ°μ μ½μ΄μμ λμμ μννλ€.
κ·Έλμ μ΄λ¬ν μΌλ€μ μ νλλ?
λ°λ‘ CPUμ μ±λ₯μ ν₯μμν€κΈ° μν΄μλ€.
CPUμ μ±λ₯μ ν₯μμν€λ κ°μ₯ μ’μ λ°©λ²μ CPUμ ν΄λ‘μ λμ΄κ±°λ μΊμμ ν¬κΈ°λ₯Ό λ리λ κ²μ΄λ€.
νμ§λ§ ν΄λ‘μ λμ΄λ©΄ λ°μ΄ λ¬Έμ κ° μκΈ°κ³ μΊμλ₯Ό λ리면 λΉμ©μ΄ λ°λͺ©μ μ‘λλ€.
κ·Έλμ CPU μ½μ΄λ₯Ό μ¬λ¬ κ° λ§λ€κ±°λ λμμ μ€ν κ°λ₯ν λͺ
λ Ήμ κ°μλ₯Ό λ리λ κ²μ΄λ€.
μ¦, λμμ±κ³Ό λ³λ ¬μ±μ CPUλ₯Ό νκ³κΉμ§ μ₯μ΄μ§λ΄κΈ° μν΄β¦ κ³μ μΌμ μν€κΈ° μν΄ λ±μ₯ν κ°λ μ΄λΌκ³ 보면 λκ² λ€.
μ°Έκ³ μλ£
μ‘°μ±νΈ, μ½κ² λ°°μ°λ μ΄μ체μ
μ½λ©νλμ΄λ‘±, βλ³λ ¬μ±κ³Ό λΉλκΈ°μ±β, https://youtu.be/au29Z2emEmY
PyCon Korea, βλμμ±κ³Ό λ³λ ¬μ±β, https://youtu.be/Iv3e9Dxt9WY
μ¬μ΄μ½λ, βνλ‘μΈμ€, μ€λ λ, λ©ν°νμ€νΉ, λ©ν°μ€λ λ©, λ©ν°νλ‘μΈμ±, λ©ν°νλ‘κ·Έλλ°β, https://youtu.be/QmtYKZC0lMU
+) 22. 07. 17. μΆκ°
ν¨μ νΈμΆ μ μ λ¬λλ λ³μμ κ°μ 볡μ¬νμ¬ ν¨μμ μΈμλ‘ μ λ¬νλ€.
κ°μ 볡μ¬νμ¬ μ²λ¦¬νλ λ°©μμ΄κΈ° λλ¬Έμ Call By Valueμ μν΄ λμ΄μ¨ κ°μ μ¦κ°μμΌλ μλμ κ°μ΄ 보쑴λλ€.
λν, κ°μ 볡μ¬νμ¬ λκΈ°κΈ° λλ¬Έμ λ©λͺ¨λ¦¬μ μ¬μ©λμ΄ μ¦κ°νλ€.
public class CallByValueExample {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main(): x = " + d.x);
change(d.x);
System.out.println("change(d.x) λ©μλ νΈμΆ ν");
System.out.println("main(): x = " + d.x);
}
public static void change(int x) {
x = 1000;
System.out.println("change(): x = " + x);
}
}
μμ μ½λλ₯Ό μ€νν κ²½μ° μλμ κ°μ κ²°κ³Όκ° λμ¨λ€.
main(): x = 10
change(): x = 1000
change(d.x) λ©μλ νΈμΆ ν
main(): x = 10
μμ μ΄λ―Έμ§λ₯Ό 보μ. νμ¬ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό κ°λ΅νκ² νννλ€.
λ©λͺ¨λ¦¬ μμμ change λ©μλλ νΈμΆμ΄ λλλ©΄ μ¬λΌμ§ κ²μ΄λ€. κ·Έλ¦¬κ³ mainμ΄ μ€ν μ€μΈ κ±Έλ‘ λ°λ κ²μ΄λ€. κ·ΈλΌ heap μμμ μλ μΈμ€ν΄μ€(10)μ μν₯μ΄ λΌμ³€μκΉ? λΉμ°ν μλλ€. κ·Έλ₯ x νΌμ μ μμμ μ§μ§κ³ λ³Άκ³ λλ κ²μ΄λ€.
κ·Έλ¬λ―λ‘ μ무리 change λ©μλλ₯Ό νΈμΆνλ€ νλ€ mainμμμ d.x κ°μ΄ 1000μΌλ‘ λ°λμ§ μλλ€.
μ΄κ² λ°λ‘ κ°μ 볡μ¬νμ¬ μ²λ¦¬νλ λ°©μμ Call By Valueλ€.
ν¨μ νΈμΆ μ μΈμλ‘ μ λ¬λλ λ³μμ λ νΌλ°μ€λ₯Ό μ λ¬νλ€.
μΈμλ‘ λ°μ κ°μ μ£Όμλ₯Ό μ°Έμ‘°νμ¬ μ§μ κ°μ μν₯μ μ€λ€.
κ°μ 볡μ¬νμ§ μκ³ μ§μ μ°Έμ‘°νκΈ° λλ¬Έμ μλκ° λΉ λ₯΄λ€.
λ€λ§, μ§μ μ°Έμ‘°λ‘ μΈν΄ μλμ κ°μ μν₯μ λ―ΈμΉλ€λ 리μ€ν¬κ° μ‘΄μ¬νλ€.
public class CallByReferenceExample {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main(): x = " + d.x);
change(d); //μ£Όμλ₯Ό λ겨μ€
System.out.println("change(d) λ©μλ νΈμΆ ν");
System.out.println("main(): x = " + d.x);
}
public static void change(Data d) {
d.x = 1000;
System.out.println("change(): x = " + d.x);
}
}
μμ μ½λλ₯Ό μ€νν κ²½μ° λ©λͺ¨λ¦¬ ꡬ쑰λ λλ΅ μλμ²λΌ λ κ²μ΄λ€.
μκΉμ λ€λ₯΄κ² change λ©μλκ° κ°μ΄ μλ, dμ μ£Όμλ₯Ό μ λ¬ λ°μκΈ° λλ¬Έμ μΈμ€ν΄μ€(10)μ κ°μ μ§μ λ³κ²½μν¬ μ μλ€.
main(): x = 10
change(): x = 1000
change(d) λ©μλ νΈμΆ ν
main(): x = 1000
κ·Έλ¦¬κ³ μ½λλ₯Ό μ€νν΄ λ³΄λ©΄ μμ κ°μ΄ xμ κ°μ΄ 1000μΌλ‘ μ λ³κ²½λ κ²μ λ³Ό μ μλ€.
μ΄κ² λ°λ‘ Call By Referenceλ€.
κ·Έλ λ€λ©΄ Call By Value μ κ°μ μ λλ‘ μ λ¬νλ(λ³κ²½λκ² νλ) λ°©λ²μ μμκΉ?
ν¨μλ₯Ό intνμΌλ‘ λ§λ λ€ return κ°μ μ λ¬ν΄μ£Όκ±°λ λ³μλ₯Ό staticμΌλ‘ λ§λ€λ©΄ λλ€. (μλ μ°Έκ³ μλ£ μ€ λ±μλ° λμ κ°μ μ°Έκ³ .)
μ°Έκ³ μλ£
λ±μλ°, β[μλ° κΈ°μ΄ κ°μ’ κ°μ - λ±μ‘μ] 1-12. λΆλ₯΄λ κ² κ°!!! (Call by Value)β, https://youtu.be/cyvc6kYYu5o
μ½λ©ν, β[μλ°μ λ¬Έ-κ³ κΈκΉμ§]7.κ°μ²΄μ§ν₯κ°λ -2-μμ -3(call by value,call by reference)β, https://youtu.be/_-J9_OK0TyI
Jaesung, Lee. κ°λ°μ μ μ, Apple App Store