磁盘I/O是否允许多个线程同时读取同一个文件并行的,不是串行的
同时读没有多线程的问题,多线程同时写入会导致问题。I/O操作必须考虑线程安全。---追加----回应题主在答案评论中的问题:站在文件的角度,程序让它干嘛它就干嘛,系统级I/O函数从来不保证也不考虑线程问题。至于为什么在系统级的I/O函数不需要考虑线程问题,是因为在一般情况下,从系统设计的角度,线程这个概念不应该被引入系统级函数,增加系统复杂程度。站在应用开发的角度,内存数据和文件数据都属于可访问的共享资源,需要应用层来保证线程安全。顺便多说一句,在系统层,类似的概念叫“可重入(Reentrancy)式调用”。虽然可重入的调用是线程安全的。不过,可重入和多线程安全是两回事。
■网友
当然是能的,但一般不会由操作系统的系统级函数提供,因为这个不科学。想想看,又不是所有的编程都是多线程编程,相反大多数情况下读写文件都只由一个单独的线程操作。这种情况下,操作系统给你做额外的同步互斥就是多余的了,性能上下降一个数量级,吃力不讨好,实在没意思。所以呢,如果你需要磁盘I/O读写分离,多线程的时候自己又不想管同步互斥这些事情。最好的办法是中间件,比如数据库。几乎所有的数据库都能做到你想的读写,写写互斥,读读不互斥。数据库,抛开SQL语法,说白了不就是一个文件系统么。
■网友
做不到吧。
必须要原子或者锁来保证同步。
■网友
【磁盘I/O是否允许多个线程同时读取同一个文件并行的,不是串行的】 当然能。因为磁盘文件内容已经(部分的)被操作系统加载到内存缓冲区了。
所以,写log的几行代码,实测耗时为0ms
■网友
所以通常使用io流的时候,系统强制try catch
推荐阅读
- 傻子当国有银行行长都能赚钱这句话是否是对的
- 网通社|喜欢蔚来的越来越多了 连续四个月交付创新高 你是否愿意放弃特斯拉选择它?
- 豆瓣为啥受到同志社群的欢迎
- |PHEV车款没比较环保,新能源是否存在谎言呢?
- 运营商收取的流量费用价格是否合理
- 游戏公司一般咋识别游戏脚本
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 是否该停止密码掩饰了
- 织毛衣这种工艺是否会渐渐消失
- 给别人拉人头做项目,别人出事了,会连累到吗
