Clr Via C#读书笔记—I/O限制的异步操作

widows如何执行I/O操作      构造调用一个FileStream对象打开一个磁盘文件—–FileStream.Read方法从文件中读取数据(此时线程从托管代码转为本地/用户模式代码)—-Read在内部调用win32ReadFile函数—–ReadFile分配一个小的数据结构(I/O请求包,简称IRP)—-IRP请求结构初始化(包括:一个文件句柄,文件一个偏移量,一个byte[]数组地址,要传输的字节数,以及其他常规性内容)——初始化后ReadFile将线程从本地/用户模式代码转变为本地/内核模式代码,向内核传递IRP数据结构,调用windows内核—–windows内核根据IRP设备句柄windows内核知道I/O操作需要传送给哪些硬件设备——windows将IRP送给对应的设备驱动程序的IRP队列(每个驱动维护这自己的IRP队列)——-IRP到达的时候设备驱动程序将IRP信息传递给物理硬件设备上的电路板–完成 如果工作项被送入线程池的速度比一个线程处理它们的速度快,那么线程池可以创建额外的线程。例如,四核处理器,四个客户端请求可以同时在4个线程上同时运行。而且没有上下文切换。 线程池通过判断CPU是否饱和,来决定是否创建新的线程。 “I/O完成端口”(I/OCompletion Port):CLR在初始化的时候创建一个I/O完成端口,当打开硬件设备的时候,设备科绑定到I/O完成端口。驱动程序便知道将完成IRP送到哪个队列中。     CLR没开始一次垃圾回收,CLR必须挂起进程中所有的线程。以保证垃圾回收速度变快。CLR必须遍历所有线程的栈来查找根(Root). 调试应用程序,遇到断点也会挂起调试程序中所有的线程。 CLR的异步编程模块(APM     Asychronous Programming Model)  …