不带缓存的IO操作

来源:互联网 发布:淘宝畅销产品排行榜 编辑:程序博客网 时间:2024/05/16 13:33

不带缓存的IO操作

  Linux操作系统的优缺点?

Linux系统的优点:

1、免费,开源

2、系统小,占用资源少

3、方便程序员进行程序的开发与学习,如学习系统内核与系统管理

4、目前超级计算机中Linux是占很大一个比例的

Linux系统的缺点:

1、可扩展性

  随着2.6内核的出现,可扩展性已经不再像原来那样重要,但是Linux一直都没有像Unix那样的扩展性。一般来说,企业们都要求要有最大的性能,可靠性和可扩展性,Unix一直是最佳的选择。Unix系统的高可用性也比Linux操作系统更加成熟。

2、硬件集成/支持的缺乏

  尽管很多公司认为这一点是一个附加物,但是,财富500强公司通常都更喜欢来自硬件支持的更舒适的性能以及硬件与操作系统之间更加紧密地集成。我们都知道如果你的硬件供应商与你的操作系统软件供应商不同会发生什么或者受到什么职责。驱动支持是硬件供应商带来的,但这对于Linux系统来说,一直是一个挑战。

3、洞察力

一些试图劝说CIO使用Linux服务器取代Unix的人通常都会理解这个问题。Linux很不幸在很多方面都是存在风险的,并没有为企业准备好。许多CIO们都有自己的一套方法,他们并没有准备采用有风险的解决方案,即使是一个我们大多数人认为没有风险的事物。尽管对Linux的这种看法在过去的几年已经发生了很大的变化,但是,一些大型公司仍有这种顾虑。

 

 

有缓存与无缓存的区别?

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

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

 

C标准库的I/O缓冲区有三种类型:全缓冲、行缓冲和无缓冲。当用户程序调用库函数做写操作时, 不同类型的缓冲区具有不同特性。

   全缓冲

如果缓冲区写满了就写回内核。常规文件通常是全缓冲的。

   行缓冲

如果用户程序写的数据中有换行符就把这一行写回内核,或者如果缓冲区写满了就写回内核。标准输入和标准输出对应终端设备时通常是行缓冲的。

   无缓冲

用户程序每次调库函数做写操作都要通过系统调用写回内核。标准错误输出通常是无缓冲的,这样用户程序产生的错误信息可以尽快输出到设备。

 

  不带缓存的优缺点?

使用标准I / O例程的一个优点是无需考虑缓存及最佳I/O长度的选择,并且它并不比直接调用read、write慢多少。

    带缓存的文件操作是标准C库的实现,第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。所以以后每次的读写操作并不是针对硬盘上的文件直接进行的,而是针对内存中的缓存的。何时从硬盘中读取文件或者向硬盘中写入文件有标准库的机制控制。不带缓存的文件操作通常都是系统提供的系统调用,更加低级,直接从硬盘中读取和写入文件,由于IO瓶颈的原因,速度并不如意,而且原子操作需要程序员自己保证,但使用得当的话效率并不差。另外标准库中的带缓存文件IO 是调用系统提供的不带缓存IO实现的。

这里为了说明标准I/O的工作原理,借用了glibc中标准I/O实现的细节,所以代码多是不可移植的。

 

0 0