ioctl以及read阻塞型引发的思考
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个不同数据源发过来的设备,可以开线程进行处理。(所谓并发)
ioctl以及read阻塞型引发的思考的更多相关文章
- 由SecureCRT引发的思考和学习
由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...
- 曲演杂坛--一条DELETE引发的思考
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...
- SQLAlchemy并发写入引发的思考
背景 近期公司项目中加了一个积分机制,用户登录签到会获取登录积分,但会出现一种现象就是用户登录时会增加双倍积分,然后生成两个积分记录.此为问题 问题分析 项目采用微服务架构,下图为积分机制流程 ...
- Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
转自:http://blog.csdn.net/jacobywu/article/details/7475432 阻塞型I/O和非阻塞I/O 阻塞:休眠 非阻塞:异步通知 一 休眠 安全地进入休眠的两 ...
- 由C# dynamic是否装箱引发的思考
前言 前几天在技术群里看到有同学在讨论关于dynamic是否会存在装箱拆箱的问题,我当时第一想法是"会".至于为啥会有很多人有这种疑问,主要是因为觉得dynamic可能是因为有点特 ...
- Spring之LoadTimeWeaver——一个需求引发的思考---转
原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-60025.html linux设备驱动归纳总结(三):5.阻塞型IO实现 xxxxxxxxxxxxxx ...
- 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序
采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序专业程序代写c++程序代写
随机推荐
- 详解Spring DI循环依赖实现机制
一个对象引用另一个对象递归注入属性即可实现后续的实例化,同时如果两个或者两个以上的 Bean 互相持有对⽅,最终形成闭环即所谓的循环依赖怎么实现呢属性的互相注入呢? Spring bean生命周期具体 ...
- 商业智能BI工具为什么这么火?
近年来,随着大数据.数据分析技术的兴起,商业智能BI工具应运而生,其中BI工具已成为众多企业商务决策的重要工具.也许有人会问,为什么企业需要商业智能BI工具?商业智能BI工具可以为企业带来什么? 首 ...
- CLR 详解
公共语言运行时就是按照CLI标准制作的执行托管代码的环境.CLR 能运行非托管代码. 公共语言运行的功能:代码JIT/AOT编译. 内存管理 .垃圾回收.异常处理.反射服务.安全服务.程序集加载.本 ...
- H5点击不同按钮跳转显示不同分页
预期效果(页面1): 点击后显示对应的内容(页面2): HTML(页面1): 添加 onclick 跟 data-index <!-- 3我的订单 --> <div ...
- Qt:自动为class的所有属性生成getter、setter
在类所在的.h文件中,右键类名,Refactor → Create Getter and Setter
- MySQL:一些操作
参考:MySQL使用教程 写在开头:语句后都要注意加分号; 1.MySQL服务,在普通的cmd而不是MySQL cmd下进行 --停止MySQL服务 net stop mysql80 --启动MySQ ...
- cpolar——安全的内网穿透工具
什么是cpolar? cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务. 它能用在哪些场景? 微信公众号开发,实时断点调试微信消息 ...
- JZ-047-求 1+2+3+...+n
标题 求 1+2+3+...+n 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 题目链接: 求 1+2 ...
- .NetCore Web Api 利用ActionFilterAttribute统一接口返回值格式
.Net Core 同 Asp.Net MVC一样有几种过滤器,这里不再赘述每个过滤器的执行顺序与作用. 在实际项目开发过程中,统一API返回值格式对前端或第三方调用将是非常必要的,在.NetCore ...
- Linux 磁盘inode字节数占满的问题
查看ext系列文件系统的信息 #dumpe2fs /dev/sdc1 Inode count: 65536 inode号数量 Block count: 262144 块数量 Reserved bloc ...