附录 A. 开发者小贴示
- 使用线程。
- 不必要 CPU 唤醒以及未有效使用唤醒。如果您必须执行唤醒,尽快一次做完所有的事(迅速返回闲置状态)。
- 不必要的
[f]sync()
使用。 - 不必要的活跃调用或者使用简短常规超时(使用响应事件)。
- 没有有效使用唤醒。
- 低效磁盘访问。使用大量缓冲来避免频繁的磁盘访问。一次写入大块信息。
- 低效使用计时器。可能时使用跨应用程序(甚至跨系统)的组群计时器。
- 过量的 I/O,电源消耗或者内存使用(包括内存泄露)
- 执行不必要计算。
A.1. 使用线程
Python 使用全局锁定解码器[1],因此使用线程只能在有大量 I/O 操作时受益。Unladen-swallow [2] 是一个 Python 快速部署,您可用它来优化您的代码。
Perl 线程原是用于系统中不使用 forking 技术的应用程序(比如使用 32 位 Windows 操作系统的系统)。在 Perl 线程中会为每个单一线程复制数据(写时复制)。数据不是默认共享的,因为用户应该可以定义数据共享等级。必须包括共享 threads::shared 模块的数据。但是数据不仅仅是被复制(写时复制),该模块还为这些数据生成了捆绑变量,这就需要更多的时间,且速度更慢。[3]
C 线程共享同一内存,每个线程都有自己的栈,同时内核不一定要生成新的文件描述符并分配新的内存空间。C 可以真正在更多线程中使用更多 CPU 支持。因此要最大化您的线程性能,请使用低级语言,比如 C 或者 C++。如果您使用脚本语言,请考虑写入一个 C 绑定。请使用分析器识别不能很好执行的代码。[4]