首页 > 其他分享 >文件系统 fdatasync fsync sync 详解

文件系统 fdatasync fsync sync 详解

时间:2023-05-08 11:14:07浏览次数:34  
标签:文件 缓存 fsync buffer Cache sync 磁盘 fdatasync

一、Buffer和Cache简介

 

数据写入内存空间,这段空间就是缓冲区buffer,写入缓冲区

把数据从内存空间读出,这段空间就是缓存器cache,读取缓存区

 

 

1、 cache

Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器。

 

Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

脏页: linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。

2、buffer

Buffer,一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。

 

Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时。

 

3、buffer和cache区别

buffer与cache操作的对象就不一样。

1)buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。

2)cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计的,也就是平常见到的一级缓存、二级缓存、三级缓存。

 

 

 

二、系统调用

延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。

当系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘与缓冲区的一致性,UNIX系统提供了sync、fsync和fdatasync三个函数。

 

1、sync

sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。

2、fsync

fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。

3、fdatasync

fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。

标签:文件,缓存,fsync,buffer,Cache,sync,磁盘,fdatasync
From: https://www.cnblogs.com/binyue/p/17381091.html

相关文章

  • c#中使用 async 和 await 的异步编程
    什么是异步编程异步编程是对线程的一种应用方式。类似于人跑步时戴着耳机听歌,这两个行为可以同时进行,而不是先跑完步再听歌。异步编程就是同一时间做多件事,通常异步编程就是在继续运行原有逻辑的同时,把耗时的操作放进一个单独的线程中进行并行处理,以重复利用CPU资源以及节省总的......
  • await-async
                    ......
  • 《asyncio 系列》7. 在 asyncio 中引入多线程
    楔子在从头开始开发新的IO密集型应用程序时,asyncio可能是首选技术,并且也要使用与asyncio搭配工作的非阻塞库,如asyncpg、aiohttp等等。然而我们工作的很大一部分可能是使用阻塞IO库管理现有的代码,例如对HTTP发请求的requests,用于PostgreSQL数据库的psycopg2,或其他......
  • python asyncio
    例子importasyncioasyncdefmain():print("hello")awaitasyncio.sleep(1)print("world")asyncio.run(main())主要函数task=asyncio.create_tas()res=awaitasyncio.gather(task1,task2)#res:list获取返回值res=awaittask......
  • Linux 工具 | rsync
    rsync是非常常用的文件同步工具既可以同步本地数据,类似于cp。又可以同步远程数据,类似于scprsync不会复制全部文件,而是采取增量备份,只复制有改动的文件,速度很快rsync算法中判断文件改动的默认规则是,文件大小或文件修改时间同步本地文件最基础的用法rsync-auv/dir1/fi......
  • Hashtable、synchronizedMap、ConcurrentHashMap 深度比较
    关键字:Hashtable、synchronizedMap、ConcurrentHashMap深度比较util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的、线程安全的实现。BrianGoetz向您展示了用ConcurrentHashMap替换Hashtable或synchro......
  • 《asyncio 系列》6. 在 asyncio 中引入多进程
    楔子到目前为止我们使用asyncio获得的性能提升,一直专注在并发运行IO密集型工作上面,当然运行IO密集型工作是asyncio的主要工作,并且按照目前编写代码的方式,需要注意不要在协程中运行任何的CPU密集型代码。但这似乎严重限制了asyncio的使用,因为这个库能做的事情不仅仅限......
  • 揭秘镭速传输点对点传输技术,NAT+Raysync强强组合
    点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽、存储空间、计算能力。点对点传输技术有很多应用,包括共享各种格式音频、视频、数据等。在5G重新定义带宽,信息技术不断发展的今天,一站式大文件传输解决方案提供商镭速传输深挖点对点传输技术......
  • GetTextAsync 或 异步函数执行完毕后的处理技巧
    //方法一Task.Factory.StartNew(()=>                       {                           //inti=0;                           //varpageText=wb.GetTextAsync();         ......
  • Python asyncore socket客户端开发基本使用
    导读asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服务器的基础结构,这篇文章主要介绍了Pythonasyncoresocket客户端开发基本使用,需要的朋友可以参考下介绍asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服......