前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux系统中的IO

linux系统中的IO

作者头像
入门笔记
发布2022-06-02 19:03:31
2.3K0
发布2022-06-02 19:03:31
举报
文章被收录于专栏:入门小站入门小站

I/O 即输入 / 输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出 。

这句话换到编程中就是 CPU 与外部存储器的输入输出,包括 CPU 本身的一,二,三级的缓存,内存,硬盘,网络,Usb 设备等等

Linux中的IO机制

  • 阻塞与非阻塞

在调用IO函数时,如果需要等待IO事件准备就绪才返回执行结果就是阻塞的IO调用,如果调用IO函数时,不需要IO事件准备就绪就可以返回结果就是非阻塞。

  • 同步与异步

同步是指在非阻塞的前提下每次调用IO函数不一定会返回准备就绪的IO事件,所以需要不断地去调用IO函数查看是否有IO事件准备就绪。异步是指在非阻塞的前提下每次调用IO函数后,本线程不在接管IO事件的处理,会告诉程序如果你有准备就绪的IO事件你就去把你的IO事件交给其他线程的函数处理。

  • 多路复用IO技术

在早期的网络服务器中为了处理多个连接请求往往需要开辟多个线程,每个线程负责一个连接的处理,但是多线程需要进行CPU的上下文切换。而上下文切换需要处理文件句柄,这些操作是十分繁琐的,所以多线程并不是很好的解决方案。

在编程中常见的 I/O 操作有哪些

一般软件都会有数据库,不论是 web 软件还是移动,桌面端软件,如果数据库是保存在硬盘的话,那么对数据库的增,删,改,查都是对硬盘 I/O 的操作

  • PHP
代码语言:javascript
复制
$result =  query(select/insert/update.....);
  • Node.js
代码语言:javascript
复制
query(select/insert/update.....,(err,result)=>{
   if(err)return err;
   // use result
 });

你的应用也可能会使用缓存,比如 Redis,Memcached 意味你需要内存进行操作,即内存 I/O

  • PHP
代码语言:javascript
复制
$result =  redis.set('test');
  • Node.js
代码语言:javascript
复制
redis.set('test',(err,result)=>{
   if(err)return err;
   // use result
 });

使用远程的数据需要用到网络 I/O

  • PHP
代码语言:javascript
复制
$result =  request.post('url');
  • Node.js
代码语言:javascript
复制
request.post('url',(err,result)=>{
   if(err)return err;
   // use result
 });

编写 Node.js 的人理解 I/O 尤为重要,你对 Node.js 的理解更为深刻,Node.js 的接口都是很低级别的,比如 stream,buffer,process,但 PHP 不需要理解那么多底层

  • Java

读取文件

代码语言:javascript
复制
public static void readByteFromFile() throws IOException{
     File file= new File( "/tmp/rumenz.txt");
     byte[] byteArray= new byte[( int) file.length()];
     //因为是用字节流来读媒介,所以对应的是InputStream
     //又因为媒介对象是文件,所以用到子类是FileInputStream
     InputStream is= new FileInputStream( file);
     int size= is.read( byteArray);
     System. out.println( "大小:"+size +";内容:" +new String(byteArray));
     is.close();
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux中的IO机制
  • 在编程中常见的 I/O 操作有哪些
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档