内存操作是io操作吗

阅读 6.1k
5 个回答

io指的是网络和磁盘。
如果内存都算io,那世界上就只有io密集型操作,不存在cpu密集型操作了。
因为cpu计算也是算内存里的数据啊。

至于系统调用,协程也是用户态啊,也需要系统调用啊。

IO 是什么? 进和出。
进那里,出哪里?内存。
gc释放内存,没有和外部空间的交换,所以没有IO。

硬要说是也是, 不过一般情况下,是否算io操作要看你研究的问题是什么.
比如这个常见面试题: 对一个二维数组求和,哪个写法更快.

matrix = [
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4]
]

n, m = len(matrix), len(matrix[0])
su = 0
for i in range(n):
    for j in range(m):
        su += matrix[i][j]
su = 0
for j in range(m):
    for i in range(n):
        su += matrix[i][j]

这个问题下, 从内存读取int到cpu是否充分利用了cpu的缓存会对性能造成一定影响,可以认为求和这个过程的主场是在cpu的寄存器上,而内存是拖后腿的, 那么这个时候可以认为操作内存属于io操作.

而对于gc这个过程来说,你的主场就是内存上,这个时候操作内存就不算是io操作了,或者说你把内存看作io也不解决任何问题.

应该说对内存的操作,一般不认为是IO操作,特别是程序完全在物理内存中执行时数据读写时,不是IO操作。

但程序执行IO操作时,其实可能触发IO操作,因为存在用存储模拟内存,以满足程序运行的可能,这时由操作系统来调度了部分内存数据存储到磁盘空间中,或者从磁盘空间中读取数据到内存,如果真正存在这样的时候,会极大的减慢实际程序的执行,因为需要等待内存数据的就绪。

应该算的吧 比如Java中的IO类ByteArrayInputStream和ByteArrayInputStream就是内存操作流

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题