스레드 외에도 작업을 비동기로 수행한다. 태스크를 사용하려면 future 헤더가 필요하다. 태스크는 작업 패키기지로 매개변수화 되며, 프로미스(promise)외 퓨처(future) 등 서로 연동되는 두 개의 컴포넌트로 구성된다. 둘 다 데이터 채널을 통해 연결된다.프로미스는 작업 패키지를 실행해 그 결과를 데이타 체널에 보낸다. 그러면 프로미스에 연동된 퓨처가 이 결과를 가져온다. 이 두 교신 지점(Communication endpoint)은 별도의 스레드로 실행될 수 있다. 퓨처는 시간이 약간 흐른 뒤에 결과를 가져올 수 있다는 점에서 특별하다. 따라서 프로미스의 결과 계산은 연동된 퓨처의 결과와 독립적이다. 태스크는 교신 지점 간 데이터 채널과도 같다. 데이터 채널의 한쪽 지점이 프로미스라면 다른 쪽..
조건 변수는 메시지를 통한 스레드 동기화에 사용된다. 이때 condition_variable 헤더가 필요하다. 한 스레드가 메시지 발신자 역활을 하면 다른 스레드는 수신자가 된다. 수신자는 발신자가 보낸 알림을 기다리게 된다. 조건 변수의 전형적인 쓰임새는 발신자->수신자 또는 생산자>소비자 작업 흐름이다. 조건 변수는 메시지 발신자뿐만 아니라 수진자도 될 수 있다. cv.notify_one() : 대기하고 있는 스레드에게 알림을 보낸다. cv.notify_all() : 대기하고 있는 스레드 전체에게 알림을 보낸다. cv.wait(lock, ...) : std::unique_lock 을 받고 알림을 기다린다. cv.wait_for(lock, relTime, ...) : std::unique_lock 을 ..
한 PC 안에서 서버와 클라이언트 실행하여 테스트 함. 서버 순차 서버 서버의 시간을 알려주는것과 같이 서버의 응답시간이 짧은 경우 순차 서버로 구현한다. 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 #include #include #include #include #pragma comment(lib, "ws2_32.lib") #pragma warning(disable ..