附录 A. 开发人员提示


每个良好的编程书都涵盖内存分配和特定功能性能的问题。在开发软件时,请注意可能会增加软件运行系统的功耗的问题。虽然这些注意事项不会影响每一行代码,但您可以优化代码在性能频繁瓶颈的区域。
一些通常有问题的技术包括:
  • 使用线程。
  • 不必要的 CPU 唤醒,且不有效地使用唤醒。如果需要唤醒,请一次性执行所有操作(停止闲置),并尽快进行。
  • 不必要地使用 [f]sync()
  • 不必要的活动轮询或使用短、常规超时。(改为使用事件)。
  • 不有效地使用唤醒。
  • 磁盘访问效率低。使用大型缓冲区以避免频繁访问磁盘。一次编写一个大块。
  • 计时器的使用效率低下。如果可能,跨应用程序(甚至跨系统)分组计时器。
  • 过量 I/O、功耗或内存使用情况(包括内存泄漏)
  • 执行不必要的计算。
以下部分更详细地检查其中的一些区域。

A.1. 使用线程

众所周知,使用线程使应用程序性能更好、更快,但在每一个情况下都不是如此。

Python

Python 使用 Global Lock Interpreter[1]因此,线程处理只适用于更大的 I/O 操作。unladen-swallow [2] 是更快速的 Python 实施,您可能需要优化代码。

Perl

Perl 线程最初是为没有分叉(如具有 32 位 Windows 操作系统的系统)的系统上运行的应用程序创建的。在 Perl 线程中,会为每个单个线程复制数据(复制 On Write)。默认情况下,数据不共享,因为用户应该能够定义数据共享级别。对于共享 threads::shared 模块的数据,必须包含它们。但是,数据不仅会被复制(复制 On Write),但模块还会为数据创建绑定的变量,这需要更长的时间,甚至较慢。[3]

C

c 线程共享相同的内存,每个线程都有自己的堆栈,且内核不必创建新的文件描述符并分配新的内存空间。C 真正可以将更多 CPU 支持用于更多线程。因此,要最大化线程的性能,请使用 C 或 C++ 等低级别语言。如果您使用脚本语言,请考虑编写 C 绑定。使用配置文件器确定执行代码不佳的部分。[4]

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.