09_future

09_future

날짜
생성자
ShalomShalom
카테고리
pararell
작성일
2023년 05월 15일
태그
c++
이전 블로그
c++에서 future의 사용법을 보면서 sync, async와 blocking, non-blcoking에 대해 알아보자

코드

i64 Calculate() { i64 sum = 0; for (i64 i = 0; i < 1000000; i++ ) sum += i; return sum; } int main() { i64 sum = Calculate(); // 동기 std::future<i64> future = std::async(std::launch::async, Calculate); // 비동기 sleep(100ms); cout << future.get() << endl; }

동기와 비동기의 차이

동기란, 어떠한 행위를 하였을 때 행위에 대한 결과를 기다리는 것을 이야기한다.
비동기란, 어떠한 행위를 하였을 때 행위에 대한 결과를 기다리지 않고 다른 행위를 이야기 하는 것이다.
비동기는 새로운 스레드를 이용할 수도 있고 안할수도 있...습니다.
물론 위의 코드는 std::launch::async를 사용하여 새로운 스레드로 실행해준다.
하지만 std::launch::deferred를 사용했다면 별도의 스레드를 사용하지 않는다.
그냥 지연해서 실행이 되는 것이다.
즉, 결과는 저 시점에서 사용하지 않고 다른 시점에서 사용할 때 비동기라 할 수 있다.

blocking과 non-blocking

위 내용은 어떠한 상태를 이야기한다.
만약 tcp에서 select란 함수를 쓰게되면, 해당 소켓에 상태변화가 있지 않은 이상 다음 줄로 넘어 가지 않는다. 이 상태는 블로킹 상태이다.
하지만 select를 다른 스레드에서 사용을 하고, 다음 줄로 넘어가서 어떠한 행위를 하는 상태라면 non-blocking이라고 할 수 있다.

댓글

guest