linux by abi包装器

linux-aio的Python项目详细描述


[英语][한국어 (korean)]

linux-aio:python包装器用于Linux Kernel AIO

Say Thanks!

直接使用linux内核aio的python包装器模块

什么是linux内核aio?

Linux IO Models table

总之,它允许非阻塞和异步使用阻塞io操作,如read(2)write(2)

相关文件

它不同于POSIX AIO

posix aio api有aio_前缀,而linux内核aio有io_前缀。

已经有一个用于异步I/O的POSIX AIO API,但是Linux在glibc(一个用户空间库)中实现它,glibc应该在内部使用多线程。 因此,从下面的实验中可以看出,这比使用阻塞的io api要糟糕得多。

实施和结构

包装linux_aio

示例

示例可以在test directory中的代码中找到。

注释和限制

  • 显然只有在Linux上才可用
  • 因为它是一个包装器,所以带来了linux的限制。
    • 它不能用于用作内核接口的文件。(例如cgroup
    • Sometimes it works as Blocking.
      • 有一些事情已经解决后,通过发展张贴。
    • 一些功能正在添加,因为它们仍在开发中。
    • 当Linux版本较低时,还有一些特性不受支持

评估

Experiment script(需要python 3.7)

设置

  • 发行版:ubuntu server 16.04.5 lts

  • Linux:4.19.0

  • CPU:2路Intel(R)Xeon(R)CPU E5-2683 v4@2.10GHz

  • 内存:总计64GB

  • 存储:sk hynix sc300b sata 512gb

  • Python:3.7.2(Ubuntu ppa

  • 尝试以1ms间隔总共读取1000

  • 文件大小从1KB100KB不等,但很小。

  • 尝试同时增加读取的文件数

  • 因为我们已经在高性能服务器上进行了实验,所以在典型的桌面上进行测试时,可能会有更大的性能差异

比较目标

这不是一个完全公平的比较。

aiofilesaiofile是支持asyncio的库因为open()是阻塞的,所以有一个缺点是,在io进行时,您不能执行任何其他工作。libaiolinux_aio是非阻塞的,但必须轮询。

结果

它可能因环境而异。

运行时

  • 单位:秒
# of files161224
aiofiles1.6813.3185.3549.768
aiofile1.5431.9582.4933.737
libaio1.3111.3441.3621.423
open()1.2521.3221.3751.481
linux_aio1.3051.3271.3531.431

螺纹

# of files161224
aiofiles321321321321
aiofile381526
libaio1111
open()1111
linux_aio1111

内存

  • 物理内存(虚拟内存)
# of files161224
aiofiles21MB (22.6GB)21MB (22.6GB)21MB (22.6GB)21MB (22.6GB)
aiofile17MB (258MB)17MB (654MB)17MB (1080MB)18MB (1949MB)
libaio17MB (76MB)17MB (76MB)17MB (76MB)17MB (76MB)
open()17MB (76MB)17MB (76MB)17MB (76MB)17MB (76MB)
linux_aio17MB (76MB)17MB (76MB)17MB (76MB)17MB (76MB)

CPU利用率

# of files161224
aiofiles42.8%85.0%102.2%113.2%
aiofile31.4%52.4%67.0%84.0%
libaio14.0%16.0%17.2%20.6%
open()13.4%17.6%21.0%26.2%
linux_aio13.0%15.0%16.0%21.0%

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java以编程方式最小化JInternalFrame?   java使用JsonPath将不均匀列表提取为类型化对象   spring如何将java/resources文件获取到InputStream?   Java逻辑错误并不总是存在   java Firebase,更新特定字段   Java stream groupby并同时加入以进行csv导出   java安卓:如果出现任何声音,监听器将录制声音   java如何从多个文件中轮询最后修改的文件并发送到apache camel中的目标端点?   java是否返回多个比较器?   JavaBean IO:Date MMM在CAPS中不解析   当JButton从另一个类单击时,java正在更新JLabel   基类中子类的Java泛型初始化   jakarta ee Java ee制作一个以毫秒为间隔的计时器来发送数据包   json Windows Azure日期格式转换为Java日期