写点什么

用 Python 重写了 C 语言实现的 Solaris 命令,代码减少 90% 而性能提升 17 倍

  • 2019-11-11
  • 本文字数:688 字

    阅读完需:约 2 分钟

用 Python 重写了 C 语言实现的 Solaris 命令,代码减少90%而性能提升17倍

/usr/bin/listusers命令中,我修复了一个内存分配的错误,这个错误在该命令转为 64 位时会引起一些问题。在修复这个错误之后,我决定研究一下这段古老的 C 代码是否能在转换为 Python 实现后得到一些改进。



这段 C 代码大约有 800 行,但从 1988 年后就基本没有动过了,在编写这段代码的那个年代,用户数还相当少,很有可能用户信息是在/etc/passwd 这个本地文件中或者在小型的 NIS 服务器上。


经过一番研究后,我发现 listusers 的算法基本上就是一些简单的集合操作。listusers 命令不带参数,它只是把排好序的用户列表输出到域名服务里,命令后的-l 和-g 选项用来过滤用户和组所在的列表。


我用 Python3 重写了 listusers,代码行数几乎只有原来代码的 1/10——由于 Python 本身包含了集合操作,而 C 版本代码自己使用链表实现了集合操作。


但是 Python 应该会更慢一些吗?结果证明不是。实际上,在我的数据库里(数据库里包含超过 10 万的用户)测试,它反而快了 17 倍。而且,我还肯定,当 Python 版本知道命令使用了-l 和-g 选项做过滤时,它不会把整个域名服务内容同时放进内存里。


改成 Python 后,我发现之前一个长期存在的 bug 变得很容易修复,即 listusers 不能正确地扩展嵌套组的问题。之前用 C 代码编写时,并不存在嵌套组这个概念,但是,使用 LDAP,嵌套组就可以实现了。


改成 Python 后,我还发现这 100 行 Python3 版本的代码将会很容易向前维护——尽管我希望 listusers 不需要再有什么更新,因为它的原有代码都已历经了好几十年!


原文链接:


https://blogs.oracle.com/solaris/reimplementing-a-solaris-in-python-gained-17x-performance-improvement-from-c


2019-11-11 10:042405

评论 1 条评论

发布
用户头像
标题有点故意。不同背景不同时期写的东西,这样去比性能和代码行数就太缺乏科学精神。有点像你开着小货车一脚油门超过了一辆正常行驶的跑车,然后得出结论,你的车比跑车要快3倍的速度。
2019-11-11 13:13
回复
没有更多了
发现更多内容

真实用户体验的价值与示例

Yestodorrow

可观测性 业务增长 数据洞察 观测云 真实用户体验

华为云耀云服务器L实例_ 为跨境电商提升“钞”能力

轶天下事

ES6新特性(二)

阡陌r

JavaScript Rest ES6 箭头函数 symbol

用CSS+SVG做一个优雅的环形进度条

OpenTiny社区

前端 UI

Mac平台可用的终端仿真软件 SecureCRT 9

展初云

securecrt Mac软件 终端仿真

Mac可用的摄影照片后期编辑工具 Lightroom Classic 2024

展初云

Mac LR 照片后期处理

基础设施SIG月度动态:T-One 社区版调度引擎全量替换至 runnerV2 版本,调度性能平均提升 6.8 倍

OpenAnolis小助手

开源 镜像 操作系统 龙蜥社区 基础设施SIG

大模型时代,小度全屋智能超级新物种,持续加码AI未来生活

新消费日报

拒绝“反向打工”,这款轻量云服务器才是经济周期下中小企业良心之选!

YG科技

中小企业开发小程序易做大“怨种”?试试这款轻量应用服务器

YG科技

一文搞定专属码的设计与开发

百度Geek说

AI 计算机视觉 二维码 企业号10月PK榜 异形码

轻量级图片查看软件 EdgeView 4最新中文版

胖墩儿不胖y

Mac软件 图片查看软件 Mac图片工具

提升数据决策时效,火山引擎DataLeapCDC分库分表能力升级!

字节跳动数据平台

大数据 数据治理 数据安全 数据研发 企业号10月PK榜

收获认可!杭州悦数正式成为信创工委会技术活动单位

最新动态

报名开启 | 支付宝小程序云 × DCloud 将强强联合,为开发者提供多端开发服务

TRaaS

支付宝小程序 小程序云开发 uni-app DCloud

藏在超级应用背后的道家哲学

Onegun

超级应用 superapp

All IN数字化?华为云耀云服务器L实例让中小企业没有后顾之忧

YG科技

Databend hash join spill 设计与实现 | Data Infra 第 16 期

Databend

使用 LF Edge eKuiper 将物联网流处理数据写入 Databend

Databend

我与极客时间的不解之缘

打工人!

我和极客时间的故事

“创新启变 聚焦增长”极狐(GitLab)媒体沟通会,共话智能时代软件开发新生态

极狐GitLab

开源 AI DevOps gitlab DevSecOps

Mac电脑上的快速启动和工作流自动化工具 Alfred 5

展初云

效率工具 Alfred Mac

轻量云服务器成中小企业网站香饽饽,腾讯云、华为云、阿里云如何选购到合适?

YG科技

阿里云轻量云服务器市场“帝位”稳固?这位“挑战者”来势汹汹

YG科技

用 Python 重写了 C 语言实现的 Solaris 命令,代码减少90%而性能提升17倍_编程语言_Darren Moffat_InfoQ精选文章