何苦借助假借内核之手呢
何必借助假借内核之手呢?本帖最后由 VisualEleven 于 2012-09-13 21:39:59 编辑//以下代码是来自一本书上
何必借助假借内核之手呢?
本帖最后由 VisualEleven 于 2012-09-13 21:39:59 编辑
//以下代码是来自一本书上的片段, 重叠io 读取文件
{
// Was the operation queued ?
if (GetLastError() == ERROR_IO_PENDING)
{
// We could do something else for awhile here...
WaitForSingleObject(hFile, INFINITE);
rc = GetOverlappedResult(
hFile,
&overlap,
&numread,
FALSE
);
}
情景:单cpu机子上 执行以上代码
当线程执行到 WaitForSingleObject(hFile, INFINITE);的时候,cpu做了什么?调度其他线程执行。
以上代码就停止执行。,等待内核完成io,再返回来。
内核在执行io操作时候, 不也要依附于线程中吗,如果依赖于线程,那么 说白了读取io操作
还是靠线程实现的。何必借助假借内核之手呢?
[解决办法]干活的都是线程。。。
[解决办法]LZ这么多马甲
LZ去看看驱动开发之类的书,可能会找到启发
操作系统架构这样设计,你就得这样用
当中的CPU中断、IO同步之类的,不是用户态程序随便就控制的了
另外WaitForSingleObject(hFile, INFINITE);是错的,不能用文件句柄
[解决办法]此段代码可能说的是重叠io 读取文件,其核心的思想是:
1、一般是独立线程执行磁盘IO,与主线程是不在一个线程内
2、当磁盘IO操作时CPU可以执行其他线程的工作,也就是那个WaitForSingleObject时主线程可以继续工作
3、内核执行IO操作时应该是system进程中的线程与磁盘直接交互,这个我们应用层的程序是控制不到的,除非是你能编写驱动层的读写程序