Intel TBB provides a great foundation for expressing parallelism in applications that are mostly compute-bound. But threading is also often used as a way to handle multiple I/O requests, where developers face their own thread coordination challenges.
What kinds of support functions might we see in a threading library designed for I/O-oriented multi-threaded applications?
I adhere to the question.
Perhaps, I would not call it exactly IO bound. Whether a program is IO bound or CPU bound or not bound at all highly depends on an environment - network characteristics, disk characteristics, number of cores/processors, workload characteristics, etc. So the same program can perfectly be IO bound in one environment, and CPU bound in another.
So I would describe it as programs that both IO and CPU intensive and contain a lot of "unstructured concurrency" (not just number-crunching with parallel_for).
Such patterns can be found in server software (network servers, application servers, database servers, web servers), middle-ware, games, etc. IMVHO, it's more than 50% of applications that require any concurrency support, and currently Intel provides basically no support for such applications.
"IO bound" applications were never the purview of TBB. The design was directed toward loop-level parallelism. I was trying to find a quote to that effect, but can't locate one.
A library that supported IO bound operations would probably need something to spawn asynchronous IO requests from tasks that would allow the task to do some other computation until the request was needed/satisfied. There are plenty of examples available in threading libraries currently in use that can be adapted to that purpose. I suppose if TBB were to incorporate this kind of operations it would adapt these kinds of ideas.