1、fwrite与磁盘写回
C库函数fwrite()就是通过write()系统调用来实现文件写操作。
标准IO流操作读写普通文件是使用全缓冲的,默认缓冲区长度是该文件系统优先选用的IO长度(一般是4kB)。因此当数据长度没有填满缓冲区时,没有写回文件,在文件中是无法看到的。
标准IO都有缓存区,这和系统缓冲不同,我们使用fflush()只保证了将IO缓冲写入系统缓冲中,使IO读操作能成功,但系统什么时候写入磁盘,由系统决定,一般是达到一定量时系统他就写入磁盘。当然可以强制系统将系统文件缓冲的内容写入磁盘。系统调用中的read/write是将内容直接写到系统的文件缓冲区。 fwrite返回后,数据还在缓冲区,如果这时候进程core掉,这些数据会丢失,没有写到磁盘介质上。当调用fclose的时候,fclose调用会把这些数据刷新到磁盘介质上。除了fclose方法外,还有一个主动刷新操作fflush 函数,不过fflush函数只是把数据从CLib buffer 拷贝到page cache 中,并没有刷新到磁盘上,从page cache刷新到磁盘上可以通过调用fsync函数完成。
2、了解的分布式一致性算法
CAP原理中,有三个要素:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容忍性(Partition tolerance)
分布式一致性问题:在分布式环境中各节点状态和数据不一致的问题。
最终目的:像一台机器一样提供服务,更详细的解释就是,当其中某个服务器收到客户端的一组指令时,它必须与其它服务器交流以保证所有的服务器都是以同样的顺序收到同样的指令,这样的话所有的服务器会产生一致的结果。
一致性分类:
严格一致性(Strict Consistency):
要求全局时钟,任何时刻都是一致的。(现实无法实现)
强一致性:
顺序一致性(Sequential Consistency):分布式逻辑时钟(有额外的性能开销),所有的进程以相同的顺序看到所有的修改,但是每个时刻可能看到的值并不一致。
线性一致性: