afliao
作者afliao·2011-05-09 10:51
数据库管理员·南大通用

理解aio和kaio

字数 477阅读 1601评论 0赞 0
对于aio:
客户端的session线程(sqlexec)发出select请求,先到共享内存buffer中寻找数据,如果没有发现,则放置一条请求到aio列队中,等待aio类的线程进行磁盘读操作,此时sqlexec线程把资源让给其他线程,并把自己放入等待列队,等待aio线程的磁盘读操作结束。一旦aio线程将数据从磁盘读入内存后,sqlexec线程将会放入就需队列,并将内存中读入数据送到客户端。
对于kaio:
用户线程(sqlexec)发出select请求,发现buffer中没有数据,此时同样会在aio列队中放入一条记录,然后kio线程读取列队中的请求并发送一条消息到操作系统内核,让操作系统去执行io操作。此时,kio线程的工作就做完了。操作系统将数据从磁盘读入buffer中。cpu vp发现操作系统执行的io操作已经完成(通过polling操作系统),cpu vp将sqlexec线程放入到就绪列队中,时间片到后sqlexec将读取buffer中的数据。
因为sqlexec线程和kio线程都是在cpu vp中,所以,减少了进程之间的上下文切换的时间。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广