我看了下,非阻塞模式是针对l类似socket这样的终端文件描述符,对普通文件应该没用吧。
写1M用1ms,你算算这个吞吐量是多少?1GB/s诶!你以为你硬盘有那么快?神奇了……[从1700M左右以后,每隔几M或十几M二十M就有一兆的写时间很长]——多稀奇阿,说明你硬盘的实际吞吐速率就只有每秒几M或十几M二十M那么多……
所以,毛的设置也没用……设置太大了还会导致异常启动时FS日志无法重放,到时候你更惨……
1. 文件write *** 作是原子的,多个进程同时写文件,原理上是没问题的。但是问题会出现在:如果多个进程写文件时是先lseek再write,就会出现覆盖。打开文件时使用append标志可以使先lseek再write这个 *** 作变成原子 *** 作,这样可以避免覆盖。2. 多线程共享一个文件句柄的话,是不会有问题的。
3.
4.linux读写磁盘文件过程中,一般情况下并不是直接 *** 作磁盘上的文件,而是读写内存中的磁盘高速缓存,内核选择合适的时机把脏页同步到磁盘。所以读写文件时不立刻调用io不是因为你说的缓冲区,read和write是没有缓冲区的。
5. fprintf和printf一样,是有缓冲区的,不过大小我不知道,也没必要知道吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)