NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

用 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:042069

评论 1 条评论

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

信通院推出数字化赋能者新标准天翼云获评数字化转型赋能服务集体

天翼云开发者社区

以太坊的扩容革命:ETH2.0

不登山的小鲁

以太坊 扩容 Ethereum eth eth2.0

一文来了解关于分布式锁的那些事儿

Linux服务器开发

redis 分布式 分布式锁 Linux服务器开发 Linux后台开发

DevOps落地思考

火线安全

DevOps 云原生 云安全 DevOps认证

融云互联网通信安全揭秘之链路安全

融云 RongCloud

网络安全

墨天轮访谈 | Pika数据库陈磊:云时代下,键值数据库是否会被替代?

墨天轮

数据库 KV存储引擎 国产数据库

中台和多云管理是伪问题?运维要集体下岗了吗?

火线安全

DevOps 云原生 云安全

译文《Java并发编程之volatile》

潘大壮

并发编程 volatile 后端 Java EE

OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询

OpenHarmony开发者

OpenHarmony 隐式查询

企业在线产品宣传册应该如何设计?

小炮

产品宣传手册

VuePress 博客之 SEO 优化(六)站长工具

冴羽

Vue 前端 vuepress SEO 博客搭建

长连接网关技术专题(七):小米小爱单机120万长连接接入层的架构演进

JackJiang

网络编程 websocket 即时通讯 网关 长连接

公有云市场百舸争流!天翼云稳居第一梯队,进入领导者象限

天翼云开发者社区

恒源云(GpuShare)_这个春天,GpuShare与你同行

恒源云

抗疫

跨境电商数据融合实践|OceanBase 助力致欧家居打造分布式跨境电商

OceanBase 数据库

oceanbase 致欧家居

跑马灯带你深入浅出TextView的源码世界

vivo互联网技术

android 源码分析 TextView

MASA Blazor入门这一篇就够了

MASA技术团队

C# .net 组件 组件库

天翼云成为首个加入openGauss社区的运营商云

天翼云开发者社区

Rust 用于移动开发的几种方式

非凸科技

Java c++ Python rust 量化

QoS 设计:车联网平台消息传输质量保障|车联网平台搭建从入门到精通 04

EMQ映云科技

物联网 IoT mqtt coap emq

Linux云计算之linux grep命令详解

学神来啦

云计算 Linux 运维 grep

安全Linux 内核提权漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

龙蜥社区一周动态 | 3.14-3.18

OpenAnolis小助手

开源 操作系统 龙蜥社区 一周动态

Gartner发布中国IaaS PaaS市场服务报告,天翼云强势入选

天翼云开发者社区

雄安新区设立四周年,看天翼云以数字底座托起未来之城

天翼云开发者社区

Docker Build时的安全问题

火线安全

Docker 云原生 云安全 docker build

融云直播 SDK 升级,让直播「PK」起来

融云 RongCloud

直播 IM 场景化

洞见科技成为华东江苏大数据交易中心会员单位,创始人姚明获颁「年度数字经济卓越领袖奖」

洞见科技

数据中心 隐私计算 数据交易

内存之旅——如何提升CMA利用率?

OpenHarmony开发者

内存 OpenHarmony

2022年最热门的招聘技术技能是什么,您绝对想不到

禅道项目管理

项目管理 开发技能

OceanBase 社区 Webinar 首播官宣|社区版 RoadMap 和性能调优!周四见

OceanBase 数据库

OceanBase 社区版

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