When considering using multiple threads with an io_service passed to a custom Boost.Fiber scheduler, I keep bumping into the problem that a given fiber scheduler instance must always run on its original thread -- but I know of no way to give an Asio handler "thread affinity." How do we get
It would be better if you used "Reply to All", since I disabled the delivery from the list. processor cycles to the scheduler on the thread whose fibers it is managing? Since we only poll on one master thread, we can easily get affinity. Maybe pseudocode is easier: * We have two class, one for main polling, others waiting for job. * The first one, polls from asio using the same way as the example (poll, or run_one). while(true) { if(!run_one()) stop_other_threads(); // No more work in asio, give up waiting poll(); // flush the queue // Now we should have some fibers in the queue. yield(); // continue execution } * Other threads, uses condvar to wait on the ready queue. awakened(){queue.push_back(f); cv.notify_[one,all](); iosvc.post([]{});} pick_next(){while(!jobs_available){cv.wait();} return job;}