Python 3 并发编程与图像压缩实践
1. 并发编程基础探讨
在并发编程中,存在一个疑问:是在一个事件循环中运行多个进程,还是在不同进程中运行多个事件循环更好呢?答案是“可能”。不过,根据具体问题,运行带有单个事件循环的独立程序副本,可能比使用主多进程来协调一切更合适。
并发是一个难题,没有一种解决方案适用于所有用例。设计并发系统时,关键在于为问题选择正确的工具。我们已经了解了几种并发系统的优缺点,现在对不同类型需求的更好选择有了一些见解。
2. 图像压缩案例研究
为了深入理解并发编程,我们构建一个基本的图像压缩工具,使用行程长度编码(Run-Length Encoding,RLE)对黑白图像进行压缩。
2.1 行程长度编码原理
行程长度编码是一种简单的压缩技术,它将重复的位串替换为重复位的数量。例如,字符串 000011000 可以替换为 04 12 03 ,表示 4 个 0 后面跟着 2 个 1,然后是 3 个 0。为了增加趣味性,我们将每行图像数据分割成 127 位的块。
选择 127 位并非随意为之,因为 127 个不同的值可以用 7 位编码。这意味着如果一行全是 1 或全是 0,我们可以用一个字节存储它,第一位表示是 0 行还是 1 行,其余 7 位表示该位的数量。
将图像分割成块的优点是可以并行处理各个块,而它们之间相互独立。然而,缺点是如果行程中只有几个 1 或 0,压缩文件可能会占用更多空间。当我们将长行程分割成块时,可能会产生更多这样的小行程,从而使文件大小膨胀。
超级会员免费看
订阅专栏 解锁全文
9008

被折叠的 条评论
为什么被折叠?



