Toa*_*oad 8 .net c# delegates asynchronous
使用委托我可以异步调用任何函数.从我理解的文档中,这是通过为线程池排队工作项来完成的.
人们也可以对IO函数进行异步调用(比如从套接字,文件,网页等中读取).我想(但我不确定)这不会在线程池中产生一个工作项.只有在获得结果(或错误)之后,才会从线程池中的新线程调用回调.
这个假设是否正确?或者是一个异步IO调用,也只是生成了一些线程?如果是这种情况,异步调用如何比自己生成线程(使用线程池)和阻塞更好?
另外:在任何给定时间可以处理多少个异步调用?如果使用了线程池,我想你想要多少.但是在IO异步调用的情况下,是否有限制?是这样,你怎么知道限制是什么?
异步IO比使用线程池中的另一个线程要复杂得多.
OS内部有许多不同的技术,支持异步IO:
1发信号通知设备内核对象
对单个设备执行多个同时I/O请求无用.允许一个线程发出I/O请求,另一个线程处理它.
2发送事件内核对象的信号
允许针对单个设备的多个同时I/O请求.允许一个线程发出I/O请求,另一个线程处理它.
3使用可警告的I/O.
允许针对单个设备的多个同时I/O请求.发出I/O请求的线程也必须处理它.
4使用I/O完成端口
允许针对单个设备的多个同时I/O请求.允许一个线程发出I/O请求,另一个线程处理它.该技术具有高度可扩展性并且具有最大的灵活性.