asio run vs poll

discussions

Using io_service::poll instead of io_service::run is perfectly acceptable. The difference is explained in the documentation

The poll() function may also be used to dispatch ready handlers, but without blocking.

Note that io_service::run will block if there's any work left in the queue

The work class is used to inform the io_service when work starts and finishes. This ensures that the io_service object's run() function will not exit while work is underway, and that it does exit when there is no unfinished work remaining.

whereas io_service::poll does not exhibit this behavior, it just invokes ready handlers. Also note that you will need to invoke io_service::reset on any subsequent invocation to io_service:run or io_service::poll.

summary

1. run: will block if there's any work left in the queue

2. poll: dispatch ready handlers, but without blocking

3. blocking vs non-blocking

如何集成到GraphApi中去

idea1： 一个graph配一个io_service. 用io_service的run()驱动graph执行

Pros:简单，容易debug。应用层是同步处理，用法简单

Cons:io_service创建的effort大不大？