当前位置: 首页 > news >正文

可以发外链的网站或平台有哪些seo搜索引擎优化招聘

可以发外链的网站或平台有哪些,seo搜索引擎优化招聘,长沙网页设计培训只问沙大计教育靠谱,大连哪个企业想做网站一、I/O缓存的背景 I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库…

一、I/O缓存的背景

I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库函数与Unbuffered I/O函数?它们有什么区别?

二、带缓存的I/O操作

​带缓存IO(标准IO),不依赖系统内核,所以移植性强,使用标准IO操作为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等其他细节都是标准IO库代你处理好了。系统调用如图所示

比如要写数据到文件上,内核缓存区长度是100字节,我们调用不带缓存的IO函数write()就要调用10次,这样系统效率低。

现在我们在用户层建立另一个缓存区(用户层缓存区或者叫流缓存),假设流缓存的长度是50字节,我们用标准C库函数的fwrite()将数据写入到这个流缓存区里面,流缓存区满50字节后在进入内核缓存区,此时再调用系统函数write()将数据写入到文件(实质是磁盘)上标准IO操作fwrite()最后还是要掉用无缓存IO操作write,这里进行了两次调用fwrite()写100字节也就是进行两次系统调用write()函数。

​ 无缓存IO操作数据流向路径:数据——内核缓存区——磁盘
​ 标准IO操作数据流向路径:数据——流缓存区——内核缓存区——磁盘

​ 标准I/O对每个I/O流自动进行缓存管理(标准I/O函数通常调用malloc来分配缓存)。它提供了三种类型的缓存:
​ 1) 全缓存:缓存满时I/O操作。磁盘上的文件通常是全缓存的。
​ 2)行缓存。当输入输出遇到新行符或缓存满时.stdin、stdout通常是行缓存的。
​ 3)无缓存。相当于read、write了。stderr通常是无缓存的

三、无缓存I/O(Unbuffered )I/O函数

刚看到这个"unbuffered",读者就觉得奇怪,操作系统不是对所有的输入输出都会做缓存吗(delayed write),为什么还会存在unbuffered?

其实,这里的ubuffered,是指的是针对与read和write本身来说,它们是没有缓存机制,比如read(fd,temp,100),在读够100个字节后或者遇到文件EOF后就返回,非常单纯。而C标准库函数中的fread和fwrite,就是利用缓存技术来调用read和write,可以说是buffered I/O。

但是,叫做无缓存IO是因为在用户层没有缓存,但对于Linux内核来说,还是进行了缓存,只是用户层看不到罢了。

这些不带缓存的I/O函数不是标准 C的组成部分,但是,它们是POSIX.1和Single UNIX Specification的组成 部分。C标准库函数是C标准的一部分,而Unbuffered I/O函数是UNIX标准的一部分。只有在UNXI平台上才能用Unbuffered I/O函数,windows上不行。所以C标准I/O库函数在头文件stdio.h中声明,而read、 write等函数在头文件unistd.h中声明。
 

四、两种I/O函数使用场景

open、read、write、close等系统函数称为无缓冲I/O(Unbuffered I/O)函数,用户程序在读写文件时既可以调用C标准I/O库函数,也可以直接调用底层的Unbuffered I/O函数,那个各自使用场景是什么呢?

  • 用Unbuffered I/O函数每次读写都要进内核,调一个系统调用比调一个用户空间的函数要慢很多,所以在用户程序开辟I/O缓冲区还是必要的,用C标准I/O库函数比较方便,省去自己开辟内存空间。
  • 用C标准I/O库函数要时刻注意I/O缓冲区和实际文件有可能不一致,在必要时调用fflush(3)。
  • UNIX的传统是Everything is a file,I/O函数不仅可以读写文件还可以读写设备。在读写设备时通常是不希望有缓冲的。比如网络设置的读写就希望是实时读写,而不希望只写到缓冲区里,所以网络编程通常直接调用Unbuffered I/O函数。
     

五、磁盘交互的读写文件流程

当应用程序尝试读取磁盘上的某块数据的时候,如果这块数据已经存放在页缓存(内核高速缓存)中,那么这块数据就可以立即返回给应用程序,而不需要经过实际的物理读盘操作。当然,如果数据在应用程序读取之前并未被存放在页缓存中),那么就需要先将数据从磁盘读到页缓存中去。

对于写操作来说,应用程序也会将数据先写到页缓存中去(这里所说的写到页缓存中,如果是调用标准库I/O进行写,那么首先是写到标准库的缓冲区内,如果标准库的缓冲区写满以后,在写到页缓冲内;如果是系统调用,那么直接写到页缓冲内)。

数据是否被立即写到磁盘上去取决于应用程序所采用的写操作机制:如果用户采用的是同步写机制,那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止;如果用户采用的是延迟写机制,那么应用程序就完全不需要等到数据全部被 写回到磁盘,数据只要被写到页缓存中去就可以了。

在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。与异步写机制不同的是,延迟写机制在数据完全写到磁盘上得时候不会通知应用程序,而异步写机制在数据完全写到磁盘上得时候是会返回给应用程序的。所以延迟写机制本省是存在数据丢失的风险的,而异步写机制则不会有这方面的担心。

 

参考:

带缓冲I/O 和不带缓冲I/O的区别与联系-CSDN博客

理解标准I/O库的缓冲机制及应用-CSDN博客

unix系统编程小结(一)------文件I/O-neilhappy-ChinaUnix博客


 

http://www.wooajung.com/news/27271.html

相关文章:

  • 门户网站和部门网站的区别软文广告成功案例
  • 现在c 做网站用什么框架成都网站制作维护
  • 网站认证收费吗视频剪辑培训机构
  • 卖文具做网站好还是做电商好深圳做网站公司哪家好
  • 离开此网站系统可能不会保存您做的更改免费seo关键词优化方案
  • 服装行业网站建设方案百度网站提交入口
  • 二手服务器做网站站长工具忘忧草社区
  • 网站外链怎么购买网站推广平台排行
  • 加强党委网站建设广告策划
  • 有什么网站是做平面设计的今日国际新闻摘抄
  • 丽水企业网站建设公司怎么免费注册域名
  • 安卓手机搭建wordpress东莞网站关键词优化公司
  • 邢台百姓网免费发布信息查询seo页面排名优化
  • 网站如何做网站解析百度搜索风云榜小说
  • 网站做好是需要续费的吗seo外链代发
  • 现在海外做的比较好一点的网站青岛网站建设方案
  • 网站服务器地址查询方法南宁seo推广公司
  • 百度官网认证 网站排名百度seo
  • 专业做家具的网站谷歌外贸平台叫什么
  • wordpress文章页隐藏侧边栏seo外包多少钱
  • 网站建设 十佳制作短视频seo厂家
  • 网站备案花钱吗seo必备工具
  • 住房和城乡建设厅网站衡水网站seo
  • 网站制作旅行社关键词有哪些?
  • 政府网站建设管理情况总结市场推广策略
  • 彩票网站什么做app网络推广公司
  • 什么网站做ppt好关键词优化的方法有哪些
  • 广州企业网站排名百搜科技
  • 做网站的服务器哪个系统好阿里指数在哪里看
  • SEO与网站建设创意泰安做百度推广的公司