ioctl以及read阻塞型引发的思考
2024-08-30 08:41:20
1. 尝试strace 或 jstack 去追踪程序,发现某一个进程作为socket连接server出现如下的log(strace追踪):
1. ioctl(45,[0],0) = 0
2. ........
3. ioctl(45,[12],0) = 12
ioctl作为用户态和内核态的数据交互,按照最简单的方式理解:
ioctl询问内核是否有资源/数据可取,返回len>0则调用系统接口read读取资源/数据,接着处理后续的业务逻辑。
该过程应该很容易理解。
2. 了解ioctl的作用
搜索的一些资料: “ioctl函数里面都实现了多个的对硬件的操作,通过应用层传入的命令来调用相应的操作”。
3. read作为一个阻塞型的接口,在socket接收数据过程中是否有其他影响。
当服务器读取数据,通过read,一旦客户端异常退出,该处read阻塞,导致一直等待下去。
while(1)
{
int len;
len = read(fd,buffer,0);
if(len > 0)
do_what_do();
}
当客户端发来10段数据:
1. 当while(1)是在一个线程里面跑的部分程序,len>0则处理第一段数据,进入do_what_do,在处理do_what_do过程中是无法继续在read读取数据。
10段数据只能一段一段进行处理。
2. 若对应do_what_do有10个不同数据源发过来的设备,可以开线程进行处理。(所谓并发)
最新文章
- xamarin uwp数字证书公钥私钥
- sharepoint
- php生成html文件的多种方法介绍
- Python全栈开发day7
- OS存储器管理(一)
- Ehcache与Guava Cache的区别浅谈
- (原)android中的动画(二)
- 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
- jquery :checked(过滤选择器) 和 空格:checked(后代选择器)
- 3、使用Oracle Logminer同步Demo
- C#读取shapefile文件(不用AE)
- JS之mouseover和mouseenter
- jenkins相关
- Ext.net 异常统一管理,铥掉可恶的 Request Failure
- Many To one 多对一
- 导入一个AndroidStudio工程作为一个Library Module
- 算法导论学习---红黑树具体解释之插入(C语言实现)
- ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因
- django默认模板引擎和jinja2模板引擎
- c++ 一个h文件里面定义一个主类,然后定义多个子类