士大夫但是

一、关于五种I\O模型 阻塞非阻塞 同步异步的理解学习(理解不知道有没有有误)

疑问主要在:同步异步和阻塞非阻塞两组概念的区别
同步io里面包括:阻塞和非阻塞io 多路复用io(select、poll)

(1)阻塞io
进程发起io调用请求以后,会阻塞进程等待系统调用,如果内核进程未准备好数据不会返回,而是阻塞等待数据,常见的阻塞socket适用于一些并发量小的应用
(2)非阻塞io
非阻塞io的理解 进程发起io调用以后,通过内核到io缓冲区读取数据,若未准备好数据,会返回一个错误信息而不会阻塞等待,等到获取数据信息以后,内核会将数据返回到进程当中。
对于非阻塞io来说适用于一些并发性较小的且不需要及时响应的网络任务,但由于其轮询机制需要消耗cpu资源

同步阻塞方式:
发送方发送请求之后一直等待响应。
接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

同步非阻塞方式:
发送方发送请求之后,一直等待响应。
接受方处理请求时进行的IO操作如果不能马上的得到结果,就立即返回,取做其他事情。
但是由于没有得到请求处理结果,不响应发送方,发送方一直等待。
当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。

异步阻塞方式:
发送方向接收方请求后,不等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作。

异步非阻塞方式:
发送方向接收方请求后,不等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。
当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。

二、文件io
对open/read/write等函数理解 与fopen等c库函数区分
Open函数:不带缓冲的一种I/O,调用内核中的系统调用实现,依赖操作系统的读写功能实现,返回值为文件描述符,读写需要进行应用态到内核态的切换,作为系统函数不可移植,open多用于打开设备文件,一般为二进制文件
Fopen函数:标准c库函数可移植,该函数使用会自带要给缓冲区,通过将磁盘文件数据读取到缓冲区,借助文件结构体指针对文件进行操作(区分fd)

Open(const char *path,int flag,…)
参数:1.path 打开或创建的文件名称
2.三种打开方式 O_rdonly 只读 O_WRONLY只写 O_RDWR读写打开
O_EXEC 只执行打开 O_SEARCH只搜索打开应用于目录

Close函数:
关闭打开文件
关闭一个文件的同时还会释放该进程加在文件上的所有锁

Lseek(int fd,off_t offset,int whence)
whence几种选项:SEEK_SET 偏移量为距离文件开始处offset个字节
SEEK_CUR 偏移量为当前值加offset个字节
SEEK_END, 则将该文件的偏移量设置为文件长度加offset

执行成功返回 文件偏移量

三、两道代码题
(1)在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法1:暴力求解
解法2:线性查找的思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值