μ κΈμ κΉμ±λ°μ μλμ μλ° κ°μλ₯Ό λ°νμΌλ‘ μ°μ¬μ‘μ΅λλ€.
λ μμΈν λ΄μ©μ μλ λ§ν¬λ₯Ό ν΅ν΄ μμλ³΄μ€ μ μμ΅λλ€.
1-BλΆλΆμ λ³λ ¬νν΄μ μ€νμν¨λ€λ©΄, νλ‘κ·Έλ¨μ μ±λ₯μ ν₯μ μν¬ μ μλ€.
μλ¬μ λ²μΉ(Amdahl's Law)
μλ¬μ λ²μΉ( Amdahl's Law )μ μλ¬μ μ μ£Όλ‘λ λΆλ¦¬λ©°, μ»΄ν¨ν° μμ€ν μ μΌλΆλ₯Ό κ°μ ν λ μ 체μ μΌλ‘ μΌλ§λ§νΌμ μ΅λ μ±λ₯ ν₯μμ΄ μλμ§ κ³μ°νλλ° μ¬μ©λλ€. μ§ μλ¬μ μ΄λ¦μμ λ°μλ€. μ΄λ‘ (theory)λ§ λ§μ μ»΄ν¨ν°κ³Όν λΆμΌμμ λͺ μλλ λ²μΉ(Law)μ΄λ€.
κ°κ°μ νλ‘μΈμ€λ ν,μ€ν,λ°μ΄ν°,BSS,Textλ₯Ό κ°κ³ μλ€.
νλ‘μΈμ€λ λ
립μ μ΄κΈ° λλ¬Έμ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ κ·Όν μ μλ€.
IPC
νλ‘μΈμ€ Aμμ νλ‘μΈμ€ Bλ₯Ό μ§μ μ κ·Όν μ μκΈ° λλ¬Έμ νλ‘μΈμ€ κ°μ ν΅μ μ νλ νΉλ³ν λ°©μμ΄ νμνλ€. λ©μΌμ¬λ‘(mailslot), νμ΄ν(pipe)λ±μ΄ λ°λ‘ νλ‘μΈμ€ κ°μ ν΅μ μ¦, IPCμ μ λ€μ΄λ€.
νλ‘μΈμ€λ λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μ§λκΈ° λλ¬Έμ IPλ₯Ό ν΅νμ§ μκ³ ν΅μ ν μ μλ€.
νλ‘μΈμ€κ° μ¬λΏμ΄ λ³λ ¬μ μΌλ‘ μ€νλκΈ° μν΄μλ νμ°μ μΌλ‘ 컨ν μ€νΈ μ€μμΉμ΄ λ°μν μ λ°μ μλ€. μ΄κ²μ ν΄κ²°ν μ μλ κ²μ΄ Threadμ΄λ€.
μ¦, νλ‘μΈμ€κ°μ ν΅μ νκΈ° μν΄ IPCκ° μ¬μ©λλ€λ κ²μ μ μ μλ€.
νλμ νλ‘μΈμ€κ° κ°μ§κ³ μλ λ©λͺ¨λ¦¬λ₯Ό μ¬λ¬κ°μ μ€λ λκ° κ³΅μ νλ€λ λ»μ΄λ€.
νλ‘μΈμ€μ νλ‘μΈμ€μ μ νλ³΄λ€ νλ‘μΈμ€μ μ€λ λμ μ νμ λΉμ©μ΄ ν¨μ¬ μ λ€.
Threadλ Process μμ μ‘΄μ¬νλ μ€ννλ¦μ΄λ€.
Threadλ Processμ heap,static, code μμλ±μ 곡μ νλ€.
Threadλ stackμμμ μ μΈν λ©λͺ¨λ¦¬ μμμ 곡μ νλ€.
Threadκ° codeμμμ 곡μ νκΈ° λλ¬Έμ νλ‘μΈμ€ λ΄λΆμ μ€λ λλ€μ νλ‘μΈμ€κ° κ°μ§κ³ μλ ν¨μλ₯Ό μμ°μ€λ½κ² λͺ¨λ νΈμΆν μ μλ€.
Threadλ IPCμμ΄λ Thread κ°μ ν΅μ μ΄ κ°λ₯νλ€. A,B μ€λ λλ ν΅μ νκΈ° μν΄ heapμμμ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉνκ³ , λ Threadκ° μμ λ‘κ² μ κ·Όν μ μλ€.
νλ‘μΈμ€μ²λΌ μ€μΌμ₯΄λ§μ λμμ΄λ€. μ΄ κ³Όμ μμ 컨ν μ€νΈ μ€μμΉμ΄ λ°μνλ€. νμ§λ§ μ€λ λλ 곡μ νκ³ μλ λ©λͺ¨λ¦¬ μμ λλΆμ 컨ν μ€νΈ μ€μμΉ λλ¬Έμ λ°μνλ μ€λ²ν€λκ° νλ‘μΈμ€μ λΉν΄ μλ€.
λμμ€μΈ νλ‘μΈμ€κ° λ°λ λ νλ‘μΈμ€λ νμ¬ μμ μ μν(contexμ 보)λ₯Ό μΌλ¨ 보쑴ν ν, μλ‘κ² λμκ°μνλ νλ‘μΈμ€λ μ΄μ μ λ³΄μ‘΄ν΄ λμλ μμ μ 컨ν μ€νΈ μ 보λ₯Ό λ€μ 볡ꡬνλ€. μ΄μ κ°μ νμμ 컨ν μ€νΈ μ€μμΉμ΄λΌ λ§νλ€.
μ€λ λμ 컨ν μ€νΈ μ 보λ νλ‘μΈμ€λ³΄λ€ μ κΈ° λλ¬Έμ μ€λ λμ 컨ν μ€νΈ μ€μμΉμ κ°λ³κ² νν΄μ§λ κ²μ΄ 보ν΅μ΄λ€.
νμ§λ§ μ€μ λ‘ μ€λ λμ νλ‘μΈμ€ κ΄κ³λ JVMꡬνμ ν¬κ² μμ‘΄νλ€.
νλ«νΌμ΄ κ°μλ JVMμ ꡬνλ°©λ²μ λ°λΌ νλ‘μΈμ€μ μ€λ λμ κ΄κ³λ λ¬λΌμ§ μ μλ€.
μ§κΈκΉμ§ μ½λλ€μ λ©μΈλ©μλμμ μ€νμ΄ λμ΄μ, νλ¦μ΄ νλ λ°μ μμλ€.
λ©μΈμ€λ λ μμμ μλ‘μ΄ μ€λ λ€μ μ€ν μν¬ μ μλ€.
μ΄ λ§μ λμμ μ¬λ¬κ°μ μμ
μ μν ν μ μλ€λ κ²μ μλ―Ένλ€.
-run() λ©μλλ₯Ό μμλ°κ³ μλ ν΄λμ€μμ μ€λ²λΌμ΄λ© ν΄μ£Όμ΄μΌ νλ€.
class Xxx extends Thread{
public void run(){
// λμμ μ€νλ μ½λ μμ±
}
}
run() λ©μλ μ€λ²λΌμ΄λ© νκΈ°
Xxx x = new Xxx();
x.start();
Threadλ₯Ό μμλ°μ ν΄λμ€μ κ°μ²΄λ₯Ό λ§λ ν, x.start()λ₯Ό μ΄μ©ν΄ μ€νμν¨λ€.
package totojava.thread;
public class MyThreadExam {
public static void main(String[] args) {
/*
1μ΄λ§λ€ *λ₯Ό μΆλ ₯ν΄μ 10λ² μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
*/
for(int i=0;i<10;i++) {
System.out.print("*");
try {
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
} // for
}
}
package totojava.thread;
public class MyThreadExam {
public static void main(String[] args) {
/*
1μ΄λ§λ€ *λ₯Ό μΆλ ₯ν΄μ 10λ² μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
*/
for(int i=0;i<10;i++) {
System.out.print("*");
try {
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
} // for
for(int i=0;i<10;i++) {
System.out.print("+");
try {
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
} // for
}
}
μ€νκ²°κ³Ό
νλ‘κ·Έλ¨ μ’
λ£λ μΈμ λλκ°?
β Threadλ₯Ό λ°°μ°κΈ° μ
λ©μΈλ©μλκ° λλλ©΄ νλ‘κ·Έλ¨μ΄ μ’
λ£λλ κ².
β³ Threadλ₯Ό λ°°μ΄ ν
λͺ¨λ μ€λ λκ° μ’
λ£λ λ νλ‘κ·Έλ¨μ΄ μ’
λ£ λλ€.
package totojava.thread;
public class MyThread extends Thread {
private String str;
public MyThread(String str){
this.str = str;
}
@Override
public void run() {
for(int i=0;i<10;i++) {
System.out.print(str);
try {
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
} // for
}
}
package totojava.thread;
public class MyThreadExam {
public static void main(String[] args) {
String name = Thread.currentThread().getName();
System.out.println("thread name : " + name);
System.out.println("start!");
/*
1μ΄λ§λ€ *λ₯Ό μΆλ ₯ν΄μ 10λ² μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
*/
MyThread mt1 = new MyThread("*");
MyThread mt2 = new MyThread("+");
mt1.start();
mt2.start();
System.out.println("end");
}
}
class Xxx implements Runnable {
public void run(){
// λμμ μ€νλ μ½λ
}
}
Xxx x = new Xxx();
Thread t = new Thread(x);
t.start();
package totojava.thread;
// 1. RunnableμΈν°νμ΄μ€λ₯Ό ꡬννλ€.
public class MyRunnable implements Runnable{
private String str;
public MyRunnable(String str){
this.str = str;
}
// 2. run()λ©μλλ₯Ό μ€λ²λΌμ΄λ© νλ€.
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println("---" + name + "----");
for(int i=0;i<10;i++){
System.out.print(str);
try {
Thread.sleep(1000); // 1μ΄κ° μ°λ€
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
package totojava.thread;
public class MyThreadExam2 {
public static void main(String[] args) {
String name = Thread.currentThread().getName();
System.out.println("thread name : " + name);
System.out.println("start!");
/*
1μ΄λ§λ€ *λ₯Ό μΆλ ₯ν΄μ 10λ² μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
*/
MyRunnable mr1 = new MyRunnable("*");
MyRunnable mr2 = new MyRunnable("+");
// 3. ThreadμΈμ€ν΄μ€λ₯Ό μμ±νλλ°, μμ±μμ RunnableμΈμ€ν΄μ€λ₯Ό λ£μ΄μ€λ€.
Thread t1 = new Thread(mr1);
Thread t2 = new Thread(mr2);
// 4. Threadκ° κ°κ³ μλ start() λ©μλλ₯Ό νΈμΆνλ€.
t1.start();
t2.start();
System.out.println("end");
}
}