CPU
操作内存是 IO
操作吗?
比如一个进程向操作系统申请或者释放一片内存空间,这个算是 IO
操作吗?
为什么jvm不用协程实现 gc 呢? - 陆萌萌的回答 - 知乎
为什么有人会认为 GC
就不是 IO
操作呢?
CPU
操作内存是 IO
操作吗?
比如一个进程向操作系统申请或者释放一片内存空间,这个算是 IO
操作吗?
为什么jvm不用协程实现 gc 呢? - 陆萌萌的回答 - 知乎
为什么有人会认为 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操作,因为存在用存储模拟内存,以满足程序运行的可能,这时由操作系统来调度了部分内存数据存储到磁盘空间中,或者从磁盘空间中读取数据到内存,如果真正存在这样的时候,会极大的减慢实际程序的执行,因为需要等待内存数据的就绪。
15 回答8.4k 阅读
7 回答5.2k 阅读
6 回答6.9k 阅读✓ 已解决
5 回答4.8k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
io指的是网络和磁盘。
如果内存都算io,那世界上就只有io密集型操作,不存在cpu密集型操作了。
因为cpu计算也是算内存里的数据啊。
至于系统调用,协程也是用户态啊,也需要系统调用啊。