网络库的触发机制
来源:互联网 发布:php usleep作用 编辑:程序博客网 时间:2024/05/13 11:43
接收套接字传过来的数据首先是到内核缓冲区,网络库事件循环中的可读事件触发是将数据从内核缓冲区移动到应用缓冲区中,并会触发一个回调函数OnMessage函数,根据协议判断数据包是否是一个完整的数据包,如果不是完整的数据包,立刻返回,直到内核中又接收到一些数据,可读事件触发,又从套接字接收数据到内核缓冲区拷贝到应用缓冲区。可读可写事件都是内核缓冲区与外面进行交互。
应用缓冲技术能很明显的提高系统效率,内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用Buffer来优化了这个操作,比如read本来从内核读取数据时是比较费时的,所以一次取出一块,以避免多次陷入内核。应用内核缓冲区的,主要思想就是一次读入大量的数据放在缓冲区,需要的时候从缓冲区取得数据。
管理员模式和用户模式之间的切换需要消耗时间,但相比之下,磁盘的I/O操作消耗的时间更多,为了提高效率,内核也使用缓冲区技术来提高对磁盘的访问速度。磁盘是数据块 的集合,内核会对磁盘上的数据块做缓冲。内核将磁盘上的数据块复制到内核缓冲区中,当一个用户空间中的进程要从磁盘上读数据时,内核一般不直接读磁盘,而 是将内核缓冲区中的数据复制到进程的缓冲区中。当进程所要求的数据块不在内核缓冲区时,内核会把相应的数据块加入到请求队列,然后把该进程挂起,接着为其 他进程服务。一段时间之后(其实很短的时间),内核把相应的数据块从磁盘读到内核缓冲区,然后再把数据复制到进程的缓冲区中,最后唤醒被挂起的进程。
注:理解内核缓冲区技术的原理有助于更好的掌握系统调用read&write,read把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区,它们不等价于数据在内核缓冲区和磁盘之间的交换。
从理论上讲,内核可以在任何时候写磁盘,但并不是所有的write操作都会导致内核的写动作。内核会把要写的数据暂时存在缓冲区中,积累到一定数量后再一 次写入。有时会导致意外情况,比如断电,内核还来不及把内核缓冲区中的数据写道磁盘上,这些更新的数据就会丢失。
应用内核缓冲技术导致的结果是:提高了磁盘的I/O效率;优化了磁盘的写操作;需要及时的将缓冲数据写到磁盘。
- 网络库的触发机制
- WebSocket的事件触发机制
- PB事件/函数的触发机制和触发方式
- PB事件/函数的触发机制和触发方式
- PB事件/函数的触发机制和触发方式
- PB事件/函数的触发机制和触发方式
- WSAEventselect模型中各网络事件触发机制
- Libevent多种触发机制的实现
- onSaveInstanceState和onRestoreInstanceState的触发机制
- 事件的触发机制,定义,注册
- 基于触发机制的脚本系统
- phoenix 写二级索引的触发机制
- Android事件触发机制
- Android 事件触发机制
- Android事件触发机制
- Android事件触发机制
- 事件触发机制
- jQuery Validate 触发机制
- Javascript Dom 编程艺术 abbreviation
- SSL/TLS协议运行机制的概述
- 【swift】15-0523 控制流---if switch
- GitHub 优秀的 Android 开源项目 转自http://blog.csdn.net/shulianghan/article/details/18046021
- java的单例模式几种写法
- 网络库的触发机制
- javascript dom 编程艺术 动画效果
- 优秀、全面的Android学习资源汇总
- UITextFiled的一些属性的展示
- 黑马程序员———正则表达式
- C++中的隐式类型转换
- Let the Balloon Rise HDU 1004
- java单例模式相关
- latex 多行 注释