linux – POSIX AIO库和回调处理程序
根据aio_read / write上的文档,AIO库基本上有两种方式可以通知您的应用程序异步文件I / O操作已完成.要么1)你可以使用信号,2)你可以使用回调函数 我认为回调函数比信号更受欢迎,并且可能更容易集成到更高级别的多线程库中.不幸的是,至少可以说这个功能的文档很乱.某些源(例如man page for the sigevent struct)表明您需要将sigevent结构中的sigev_notify数据成员设置为SIGEV_CALLBACK,然后提供函数处理程序.据推测,处理程序在同一个线程中调用.其他documentation表示您需要将sigev_notify设置为SIGEV_THREAD,它将在新创建的线程中调用回调处理程序. 在任何情况下,在我的Linux系统(带有2.6.28内核的Ubuntu)上,SIGEV_CALLBACK似乎没有在任何地方定义,但SIGEV_THREAD的工作方式与广告一样.不幸的是,创建一个新线程来调用回调处理程序似乎效率很低,特别是如果你需要调用许多处理程序.最好使用现有的线程池,类似于大多数网络I / O事件多路分解器的工作方式.某些版本的UNIX(如QNX)包含一个SIGEV_SIGNAL_THREAD标志,它允许您使用指定的现有线程调用处理程序,但这似乎在Linux上不可用,它似乎甚至不是POSIX的一部分标准. 那么,是否可以以在预先分配的后台线程/线程池中调用用户处理程序的方式使用POSIX AIO库,而不是每次调用处理程序时创建/销毁新线程? 最佳答案 我通常发现通过在专用后台线程或线程中执行普通IO来模拟异步IO更简单,更便携,以我喜欢的方式调度完成回调.(编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- LINUX入门:容器:Ubuntu 16.04安装Docker Compose详解
- -fstack-protector,-fstack-protector-all和-fmudflap
- 15 Linux Split and Join Command Examples to Manage Larg
- sed rare-delimiter(除了| /?…)
- linux – grubby致命错误:无法找到合适的模板
- 在自定义libc中实现线程本地存储
- linux – 运行ktpass.exe后,Kerberos服务只能运行30分钟
- linux – 当计算机切换到睡眠模式时,TCP连接会发生什么?
- linux – 如何从“grep”中排除所有“权限被拒绝”的结果行
- linux – 在环境变量中的波浪扩展
- linux – 如何将cpio(gnu,rhel 4)提取到指定目录
- virtualbox – 虚拟框中的全屏Arch Linux
- CentOS7与6的区别
- How can I exclude directories from grep -R?
- Linux系统调用表或汇编语言中的cheetsheet
- linux – 是负责设置堆栈的程序还是操作系统
- linux – 要重启服务(例如httpd),我应该使用/etc
- linux – 在这个用例中,TCP_CORK和TCP_NODELAY之
- linux – 为什么`ls`每行列出多个文件,但`ls pip
- linux – Samhain可以监控一个不存在但可能在将来