磁盘I/O是否允许多个线程同时读取同一个文件并行的,不是串行的

同时读没有多线程的问题,多线程同时写入会导致问题。I/O操作必须考虑线程安全。---追加----回应题主在答案评论中的问题:站在文件的角度,程序让它干嘛它就干嘛,系统级I/O函数从来不保证也不考虑线程问题。至于为什么在系统级的I/O函数不需要考虑线程问题,是因为在一般情况下,从系统设计的角度,线程这个概念不应该被引入系统级函数,增加系统复杂程度。站在应用开发的角度,内存数据和文件数据都属于可访问的共享资源,需要应用层来保证线程安全。顺便多说一句,在系统层,类似的概念叫“可重入(Reentrancy)式调用”。虽然可重入的调用是线程安全的。不过,可重入和多线程安全是两回事。
■网友
当然是能的,但一般不会由操作系统的系统级函数提供,因为这个不科学。想想看,又不是所有的编程都是多线程编程,相反大多数情况下读写文件都只由一个单独的线程操作。这种情况下,操作系统给你做额外的同步互斥就是多余的了,性能上下降一个数量级,吃力不讨好,实在没意思。所以呢,如果你需要磁盘I/O读写分离,多线程的时候自己又不想管同步互斥这些事情。最好的办法是中间件,比如数据库。几乎所有的数据库都能做到你想的读写,写写互斥,读读不互斥。数据库,抛开SQL语法,说白了不就是一个文件系统么。
■网友
做不到吧。
必须要原子或者锁来保证同步。

■网友
【磁盘I/O是否允许多个线程同时读取同一个文件并行的,不是串行的】 当然能。因为磁盘文件内容已经(部分的)被操作系统加载到内存缓冲区了。
所以,写log的几行代码,实测耗时为0ms

■网友
所以通常使用io流的时候,系统强制try catch


    推荐阅读