
Hi Rob, --- Rob Stewart <stewart@sig.com> wrote:
Was that 100 bytes per async call or per type of call?
Per type of call/callback handler combination.
As I understand it, you have a class template derived from win_iocp_operation.
Several class templates, yes.
Is it 100 bytes for each class created by specializing that template?
Yes, for each class that instantiates the template.
Is there a reasonable upper bound on the number of such types in a given application?
No, I don't think so. An app can make as many asynchronous calls as it wants using any combination of types for a callback handler. This even includes things like call demuxer.post(...) to cause a deferred invocation of a function object. One of the strengths of an async I/O approach is that it makes it relatively easy to compose new asynchronous operations from others. For example, you might define a function: template <typename Stream, typename Handler> void async_read_mymsg(Stream& s, mymsg& m, Handler h); which is is implemented internally using a chain of calls to async_read or async_read_n. Each one of these internal async calls would require its own win_iocp_operation-derived template instantiation, and each one of those types would also be dependent on the Handler type. So in that case the number of win_iocp_operation-derived template instantiations would be the number of internal handlers x the number of different handlers used with async_read_mymsg. And there could be further layers of composition... you get the idea. Cheers, Chris