2011-01-31 1 views
5

나는 boost :: asio (멍청한 전송 체계)를 사용하여 간단한 프로토콜 세트를 구현하고있다. 실행될 때 CPU에 바인딩됩니다. 효율성을 높이기 위해 두 호스트를 가능한 한 많이 유지하려고 노력하고 싶습니다. 호스트 A가 두 가지 작업을 수행 할 수있는 선택권이있는 경우 하나는 호스트 B가 계산을 시작하게하고 다른 하나는 호스트 A가 이전 작업을 선택하도록합니다.boost :: asio가 다른 처리기를 실행하는 것보다 async_write 호출을 우선 처리하도록하려면 어떻게해야합니까?

현재 io_service는 async_writes보다 먼저 계산 집약적 처리기를 실행하고 있습니다. tcp 창이 꽉 찼다면 (또는 유사한 상태가 socker에 데이터 쓰기를 막고있는 경우), 다른 처리기를 실행하는 대신 async_write를 끝내는 것이 좋습니다.

asio의 핸들러 우선 순위 큐 예제를 보았습니다. 그런 우선 순위 큐를 내 문제의 유일한 해결책으로 사용하려면 async_write를 다시 구현합니까?

답변

3

문서에 완료 핸들러에 우선 순위를 첨부하는 방법을 설명하는 an example이 있습니다. async_write을 다시 구현할 필요는 없으며 예제의 handler_priority_queue 클래스를 자신의 버전으로 구현하면됩니다.

+0

나는 그 예를 보았다. async_write에 우선 순위를 첨부하는 방법을 모르겠습니다. 쓰기가 비동기 적이기 때문에 async_write에 내부적으로 호출되는 완료 핸들러가 있다고 생각합니다. 그렇다면 우선 순위를 높여야합니다. – Amy

+0

@Amy 당신은'async_write'가 구성된 연산이라고 우려하고 있습니까? –

+0

나는 async_write가 완료 핸들러가 아니라는 것을 염려한다. (이것은 Handler를 구현하고 io_service :: post에 전달되는 것을 의미한다고 가정한다.) async_write가 합성 된 오퍼레이션이라는 사실에 대해서도 우려하고있다. – Amy

관련 문제