| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- redis
- SpringBoot
- thread
- MSA
- 토비의 스프링
- spring
- Stack
- 자바
- Java
- 자바 ORM 표준 JPA 프로그래밍
- IntellJ
- Collection
- 스트림
- 백준
- Kotlin
- jvm
- K8s
- list
- 보조스트림
- 토비의 스프링 정리
- JPA
- gradle
- GC
- OS
- mysql
- Stream
- 이스티오
- Real MySQL
- 쿠버네티스
- 스프링
Archives
- Today
- Total
인생을 코딩하다.
함수 호출 관점에서 동기/비동기, Blocking/Non-blocking 본문
728x90
반응형
공부한 것 기록하기
함수 호출 관점에서 동기와 비동기
함수형 인터페이스
- 함수형 프로그래밍을 지원하기 위해 java8 부터 도입
- 1개의 추상메서드를 갖고 있는 인터페이스
- 함수를 1급 객체로 사용할 수 있다.
- 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능
- Function, Consumer, Suppier, Runnable등
- 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능

- 함수형 인터페이스는 호출한 쓰레드에서 실행된다.




두 모델의 차이점

| A 모델 | B 모델 |
| main는 getResult의 결과에 관심이 있다. | main은 getResult의 결과에 관심이 없다. |
| main은 결과를 이용해서 다음 코드를 실행한다. | getResult는 결과를 이용해서 함수형 인터페이스를 실행한다. |
| 동기 | 비동기 |
| caller는 callee의 결과에 관심이 있다. | caller는 callee의 결과에 관심이 없다. |
| caller는 결과를 이용해서 action을 수행한다. | callee는 결과를 이용해서 callback를 수행한다. |
함수 호출 관점에서 Blocking과 Non-blocking
두 모델의 공통점


| A 모델 | B 모델 |
| main는 getResult가 결과를 돌려주기 전까지 아무것도 할 수 없다. | main은 getResult가 결과를 구하고 callback을 실행하기 전까지 아무것도 할 수 없다. |
| main은 getResult가 완료될때까지 대기한다. | main은 getResult가 완료될 때까지 대기한다. |
Blocking
- callee를 호출한 후, callee가 완료되기 전까지 caller가 아무것도 할 수 없다.
- 제어권을 callee가 가지고 있다.



두 모델의 차이점

| A 모델 | C 모델 |
| getResult를 호출한 후, getResult가 완료되지 않으면 main은 본인의 일을 할 수가 없다. | getResult를 호출한 후, getResult가 완료되지 않더라도 main은 본인의 일을 할 수 있다. |
Non-Blocking
- caller를 호출한 후, callee가 완료되지 않더라도 caller은 본인의 일을 할 수 있다.
- 제어권을 caller가 가지고 있다.
Blocking vs Non-blocking
| Bloking | Non-blocking |
| caller는 callee가 완료될때까지 대기한다. | caller는 callee를 기다리지 않고 본인의 일을 한다. |
| 제어권을 caller가 가지고 있다. | 제어권을 caller가 가지고 있다. |
| caller와 다른 별도의 thread가 필요하지 않다.(혹은 thread를 추가로 쓸 수도 있다) | caller와 다른 별도의 thread가 필요하다. |
D 모델


D 모델
- main은 getResult의 결과에 관심이 없다.
- 비동기이다.
- getResult를 호출한 후, getResult가 완료되지 않더라도 main은 본인의 일을 할 수 있다.
- non-blocking이다.
- 즉, D 모델은 비동기 non-blocking이다.
동기 Blocking vs 비동기 Blocking


함수 호출 모델
| 동기 | 비동기 | |
| Blocking | caller는 아무 것도 할 수 없는 상태가 된다. 결과를 얻은 후 직접 처리한다. | caller는 아무것도 할 수 없는 상태가 된다. 결과는 callee가 처리한다. |
| Non-blocking | caller는 자기 할 일을 할 수 있다, 결과를 얻은 후 직접 처리한다. | caller는 자기 할 일을 할 수 있다. 결과는 callee가 처리한다. |
728x90
반응형
'Java' 카테고리의 다른 글
| ColpletableFuture (0) | 2024.01.20 |
|---|---|
| I/O 관점에서 Blocking/Non-blocking (0) | 2024.01.20 |
| [JAVA] 상수 풀(String Pool)은 GC가 될까? (0) | 2022.04.08 |
| 자바 병렬 프로그래밍 - 스레드 안전성(Thread Safe) (2) (0) | 2021.11.18 |
| 자바 병렬 프로그래밍 - 병렬 처리의 중요성 (1) (3) | 2021.11.07 |
Comments