์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์ฝ๋ฉํ ์คํธ
- docker network
- ์ค๋ธ์
- injection๊ณต๊ฒฉ
- ๋ ผ๋ธ๋กํน
- ๋์์ธํจํด
- ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ
- spring scheduler
- spring
- ์๊ณ ๋ฆฌ์ฆ
- Personal Access Token
- oauth
- Jenkins
- db์ํคํ ์ณ
- CICD
- db์ ๋ต
- SpringBoot
- GoogleLogin
- Java
- ์ฝํ
- @scheduler
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- dockerhub
- node.js mysql ์ฐ๋
- MySQL
- java์ฑํ
- docker
- React
- Node.js
- ์๋ฐ
- Today
- Total
<Hello Hosung๐/>
[CS ์ง์]Blocking/Non-Blocking, Sync/Async ๊ฐ๋ ๋ณธ๋ฌธ
[CS ์ง์]Blocking/Non-Blocking, Sync/Async ๊ฐ๋
์ข์ถฉ์ฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ผ๊ธฐ๐ง 2024. 8. 16. 11:29
๋ถ๋ช
๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ธ๋กํน ๊ตฌ์กฐ๋ ์ด์ฉ๊ตฌ ์ ์ฉ๊ตฌ~, ๋
ผ๋ธ๋กํน ๊ตฌ์กฐ๋ ์ด์ฉ๊ตฌ ์ ์ฉ๊ตฌ~
์ด๋ฐ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ด ๋ดค์๊ฑฐ์์๐
์ ๋ํ ๋ธ๋กํน, ๋
ผ๋ธ๋กํน์ ๋ํด์ ๊ฐ๋ณ๊ฒ ์๊ณ ์์ด ์ข ๋ ๋ณต์ต ๋ฐ ๊ณต์ ํ ๊ฒธ ์ค๋ ์ด๋ ๊ฒ ์ ๋ฆฌ๋ฅผ ํ๊ฒ ๋์์ด์
๋จผ์ ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ๋ํ ์ฐจ์ด์ ๋ํด์ ๋ฐฐ์ฐ๊ธฐ์ ๊ฐ๊ฐ ์ด๋ค ๊ฐ๋ ์ธ์ง ๋จผ์ ์ค๋ช ์ ํ๋ฉด ์๋์ ๊ฐ์์.
๋ธ๋กํน (Blocking)
๋ธ๋กํน ๋ชจ๋์์๋ ์ด๋ค ์์
์ด ์๋ฃ๋ ๋๊น์ง ๊ทธ ์์
์ ์์ฒญํ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋ฉ์ถฐ ์๋ค.
์ฆ, ์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ํด๋น ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ๋ค๋ฅธ ์์
์ ์งํํ ์ ์๋ค.
๋ ผ๋ธ๋กํน (Non-Blocking)
๋ ผ๋ธ๋กํน ๋ชจ๋์์๋ ์์ ์ ์์ฒญํ๊ณ ๊ทธ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค. ์์ฒญ ํ, ์์ ์ด ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ฑฐ๋ ํ์ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ์ฆ, ์์ฒญ์ ๋ณด๋ธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ๊ณ์ํด์ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
์์ ์ฒ๋ผ ๊ธ๋ก๋ง ๋ณด๋ฉด ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต์ฃ ....๐
์๋๋ ๋ธ๋กํน ๊ณผ ๋
ผ๋ธ๋กํน์ ๋ํ ์ผ์์ํ์์ ๋ฒ์ด์ง ์ ์๋ ์์์์ ๋ณด์๋ฉด ์ข ๋ ์ดํดํ๊ธฐ๊ฐ ์์ ํ ๊ฑฐ์์๐
๋ธ๋กํน ์์ ) - ATM์์ ๋ ์ฐพ๊ธฐ
- ์ํฉ: ATM์์ ๋์ ์ฐพ๋ ๊ฒฝ์ฐ
- ๋ธ๋กํน: ๋์ ์ฐพ๊ธฐ ์ํด ATM์์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ์์
์ ํ ์ ์์ต๋๋ค.
ATM์ด ์์ ์ ์๋ฃํ๊ณ ๋์ ์ฃผ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์ผ์ ์์ํ ์ ์๋ค.
๋ ผ๋ธ๋กํน ์์ ) - ์ ํ ํตํ ์ค ๋ฌธ์ ๋ฉ์์ง ํ์ธ
- ์ํฉ: ์ ํ ํตํ ์ค ๋ฉ์์ง๋ฅผ ํ์ธํ๊ณ ๋ต์ฅํ๋ ์ํฉ
- ๋ ผ๋ธ๋กํน: ์ ํ ํตํ๊ฐ ์งํ ์ค์ผ ๋, ๋ฉ์์ง๋ฅผ ํ์ธํ๊ณ ๋ต์ฅํ ์ ์์ต๋๋ค. ์ ํ ํตํ์ ๋ฉ์์ง ํ์ธ ์์ ์ด ๋์์ ์งํ๋๋ฏ๋ก, ์ ํ ํตํ๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ฉ์์ง๋ฅผ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ค.
์ฒซ๋ฒ์งธ ์ํฉ์ ์ฐ๋ฆฌ๊ฐ ATM์์ ๋์ ์ฐพ๊ธฐ ์ํด ATM์ ์นด๋ ๋๋ ํต์ฅ์ ๋ฃ์ผ๋ฉด ATM ํ์ธ ์ ์ฐจ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋์ ์ฐ๋ฆฌ๋ ๋์ ์ฐพ๊ธฐ ์ํด์๋ ๊ธฐ๋ค๋ฆฌ๋ฆฌ๋ ์ ๋ฐ์ ์์ด์. ์ด๋ก์จ "์ ์ด๊ถ" ์ ์ฌ๋ → ATM์ผ๋ก ์์ ํ ๋์ด๊ฐ๋ค ๋ผ๊ณ ๋ณผ์ ์์ด์.
๋ค๋ง ๋๋ฒ์งธ ์ํฉ์ ์ฐ๋ฆฌ๊ฐ ์ ํํตํ ์ค ๋ฌธ์ ํ์ธ, ์ธํฐ๋ท ๊ฒ์ ๋ฑ ๋ค์ํ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ฃ "์ ์ด๊ถ"์ด ์ค๋ก์ง ํตํ๋ก ๋์ด๊ฐ์ง ์์ ์๊ธด ๋ฌธ์ ์์.
์ด ์ฒ๋ผ ๋ธ๋กํน/๋
ผ๋ธ๋กํน์ ์ ์ด๊ถ์ด ๋์ด๊ฐ๋ ์๋์ด๊ฐ๋ ๊ฐ ์ค์ํด์ ๐
์์ ๊ฐ์ ๋ด์ฉ์ด ์ดํด๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๋ฐ์ ํด๋ณธ์ฌ๋๋ค์ ์๊ฑฐ์์
???: ๊ทธ๋ผ sync(๋๊ธฐ), async(๋น๋๊ธฐ) ์ ๋ธ๋กํน๊ณผ, ๋
ผ๋ธ๋กํน์ด ๊ฐ์๊ฑฐ ์๋์์~?๐
→ ์ด๊ฑด ๋ค์์ ์ค๋ช ํด๋๋ฆด๊ฒ์
์๋๋ ๋ธ๋กํน ๊ณผ ๋ ผ๋ธ๋กํน์ ๋ํ ์์ ์์ค์์ ๋ณด์๋ฉด ์ดํด๊ฐ ํธํ์ค๊ฑฐ์์
[Blocking]
- ๋ ์ฐพ๋ ํ์๊ฐ ์์
- 3์ด ๋์ ATM ์์
- ATM ๋ ์ฐพ๊ธฐ ์ฑ๊ณต
public class BlockingExample {
public static void atmWithdrawal() {
System.out.println("ATM: ๋์ ์ฐพ๋ ์ค...");
try {
Thread.sleep(3000); // 3์ด ๋์ ๋ธ๋กํน
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ATM: ๋์ ์ฐพ์์ต๋๋ค!");
}
public static void main(String[] args) {
System.out.println("ATM์์ ๋์ ์ฐพ๊ณ ์์ต๋๋ค...");
atmWithdrawal();
System.out.println("๋ค๋ฅธ ์์
์ ์์ํ ์ ์์ต๋๋ค.");
}
}
[Non-Blocking]
- ์ ํํตํ ์์, ๋ฌธ์๋ฉ์์ง ํ์ธ ์์
- 3์ด๊ฐ ํตํ์ค, ์ด์ ๋์์ 1์ด๋์ 3๊ฑด์ ๋ฌธ์๋ฉ์์ง ํ์ธ
- ์ ํํตํ ์ข ๋ฃ
public class NonBlockingExample {
public static void phoneCall() {
System.out.println("์ ํ ํตํ ์์...");
try {
Thread.sleep(3000); // 3์ด ๋์ ์ ํ ํตํ ์ค
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("์ ํ ํตํ ์ข
๋ฃ!");
}
public static void checkMessages() {
System.out.println("๋ฌธ์ ๋ฉ์์ง ํ์ธ ์์...");
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(1000); // 1์ด ๋์ ๋ฉ์์ง ํ์ธ ์ค
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("๋ฉ์์ง ํ์ธ ์ค " + (i + 1));
}
System.out.println("๋ฌธ์ ๋ฉ์์ง ํ์ธ ์๋ฃ!");
}
public static void main(String[] args) {
Thread phoneThread = new Thread(NonBlockingExample::phoneCall);
Thread messagesThread = new Thread(NonBlockingExample::checkMessages);
phoneThread.start();
messagesThread.start();
try {
phoneThread.join();
messagesThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("๋ชจ๋ ์์
์ด ์๋ฃ๋์์ต๋๋ค.");
}
}
'๐ CS Information' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS ์ง์] JWT(Json Web Token) ์ด๋ (1) | 2024.11.16 |
---|---|
[DB] ํจ์จ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ฅผ ์ํ ๋ค์ํ ์ํคํ ์ณ (3) | 2024.11.15 |
[CS ์ง์]SQL Injection (0) | 2024.08.15 |
[CS ์ง์]XSS(ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ) (0) | 2024.08.15 |