对缓冲区和缓存的认识

缓存区是内存和cpu之间的存储区,用来存储cpu多次从内存读取到的数据,多次读取同一变量,就会将该变量放到缓存区中,当再次调用时直接从缓存区取,不从内存中取,当内存中该变量改变时,这种情况会导致内存不可见问题;这样做的目地是比访问内存更快。

缓冲区是内存中的存储区。
缓冲区分为内核缓冲区和用户缓冲区;功能不同。
内核缓冲区是网络传输,文件io,控制台输入输入等操作的“中转站”,为不可见内存,即用户不能直接使用。
作用:
1.暂时存储内核态数据,提高实际I/O效率(内核缓冲区)
例如:文件io:write操作将数据发送到内核缓冲区,剩下的操作由操作系统负责,当缓冲区的数据到达一定大小或者超时就写入文件当中。read操作将数据从磁盘写入内核读缓冲区,并且该缓冲区一般较大,下一次用户程序读取时,直接从内核缓冲区读取,不需要操作系统访问磁盘了。
2.减少读或者写的次数(用户缓冲区)
例如:还是文件的write操作,有了内核缓冲区就可以进行多次的write,数据累积到一定数量才写入文件,只进行若干次写操作就可以将大量数据写入文件中。文件的读操作类似,先将大量数据弄到用户缓冲区中,只经过了若干次的读操作。

控制台的输入输出和文件的io操作类似,都需要内核缓冲区作为缓冲区,提高实际io效率,网络传输不会提高io效率,读写受网速,接收缓冲区影响。

常见的三种I/O方式:
注意:这里的阻塞是指用户对内核缓冲区的访问,并不是对实际硬件设备的访问。
例如读文件操作,当内核读缓冲区没有数据时,调用read函数读取数据
1.同步阻塞I/O:当前线程阻塞,直到内核态将数据读取到内核缓冲区中,程序进行读取
2:同步非阻塞:当前线程继续执行,但是需要不断轮询查看是否数据被读取到缓冲区中,轮询消耗大量的cpu资源,所以这样虽然没有阻塞线程,但是效率低
3:异步:当前线程继续执行,不需要轮询,数据被读取到内核缓冲区中后,程序读取内核缓冲区,异步是真正意义上的非阻塞。

操作系统对于内核数据的处理,底层的处理十分完善,一般不用担心内核态操作系统的处理。
内核空间和用户空间与用户态和内核态的切换相关联,即和多线程相关联,并发不仅是仅仅指用户态上进程或者线程之间的并发,还包括操作系统建立在内核空间之上的用户态和内核态之间的并发;所以,空间整体上分为用户空间和内核空间,并发整体上分为用户态和内核态并发,一般情况下,内核态不会出问题,cpu异常通常是用户态上发生的异常。
内核空间是进程共享空间,相当于线程里的堆和方法区。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值