동기 (Synchronous)
작업들이 순차적으로 진행되는 방식이다.
작업이 진행되고 있을 때 다른 작업이 동시에 진행될 수 없다.
비동기(Asynchronous)
응답에 관계없이 다음 작업이 시작된다.
작업이 들어온 순서대로 진행되지 않을 수 있다.
'동기 실행'에 비해 더 빠른 시간 안에 작업들을 처리할 수 있다.
자바로 동기 비동기 구현해보기
아래와 같은 메소드가 있다고 할 때,
public class SyncAsync {
public static void main(String[] args) {
...
}
public static void dough(String dish) {
System.out.println(dish + " >> Dough");
}
public static void sauce(String dish) {
System.out.println(dish + " >> Sauce");
}
public static void cheese(String dish) {
System.out.println(dish + " >> Cheese");
}
public static void ham(String dish) {
System.out.println(dish + " >> Ham");
}
public static void bread(String dish) {
System.out.println(dish + " >> Bread");
}
public static void sausage(String dish) {
System.out.println(dish + " >> Sausage");
}
public static void patty(String dish) {
System.out.println(dish + " >> Patty");
}
}
- 동기방식
피자, 핫도그, 햄버거를 만드는 메소드를 순서대로 호출하면, 순차적으로 메소드가 실행되며 이것이 동기방식이다.
public class SyncAsync {
public static void main(String[] args) {
pizza();
hotdog();
hamburger();
}
...
public static void pizza() {
dough("Pizza");
sauce("Pizza");
cheese("Pizza");
ham("Pizza");
}
public static void hotdog() {
bread("Hotdog");
sausage("Hotdog");
sauce("Hotdog");
}
public static void hamburger() {
bread("Hamburger");
patty("Hamburger");
cheese("Hamburger");
sauce("Hamburger");
}
}
동기 방식으로 메소드를 호출했을 때, pizza 메소드를 모두 마친 후에 hotdog 메소드가 실행되며, hotdog 메소드를 모두 마친 후에 hamburger 메소드가 실행된다.
- 비동기 방식
피자, 핫도그, 햄버거를 만드는 명령을 메소드가 아닌 스레드로 호출하면, 비동기 방식으로 처리된다.
public class SyncAsync {
public static void main(String[] args) {
Thread pizza = new Thread(() -> {
dough("Pizza");
sauce("Pizza");
cheese("Pizza");
ham("Pizza");
});
Thread hotdog = new Thread(() -> {
bread("Hotdog");
sausage("Hotdog");
sauce("Hotdog");
});
Thread hamburger = new Thread(() -> {
bread("Hamburger");
patty("Hamburger");
cheese("Hamburger");
sauce("Hamburger");
});
pizza.start();
hotdog.start();
hamburger.start();
}
...
}
비동기 방식으로 실행하면, 세 개의 스레드가 동시에 실행되기 때문에, 세 요리가 섞여서 실행되는 것을 볼 수 있다.
'CS Study > 운영체제' 카테고리의 다른 글
멀티 프로세스와 멀티 스레드 (0) | 2022.05.02 |
---|---|
CPU 스케줄링 (0) | 2022.03.28 |
프로세스란? (0) | 2022.03.10 |
프로그램, 프로세스, 스레드의 차이 (0) | 2022.03.03 |