Go 学习笔记5 并发编程
Go 学习笔记3 程序的构成
Go 学习笔记4 抽象方法
Go 学习笔记2 语法、语义
重新认识 Python(8)PyObject
重新认识 Python(8)PyObject
开发环境设置和入门请看:https://zhuanlan.zhihu.com/p/358690339
本片主要介绍 Python 对象的内存构成,以及如何组织对象的方法。更多内容可以看: https://wangzhe3224.github.io/
PyObject
和 PyTypeObject
PyObject
可说是 CPython 最核心的数据结构了,在 Python 的世界里,几乎任何元素都是 PyObject 的指针(注意这里是指针,不是实际内存空间)。
Go 学习笔记 1
Go 学习笔记 1
我是一个有5年 Python 开发经验的混迹在量化交易行业的后端程序员,这个系列开个坑学习 Golang。为什么选择 Go?
“A language that doesn’t affect the way you think about programming is not worth knowing.” —Alan J. Perlis (1922-1990)
图灵奖的第一任得主,图灵说如是:一个语言如果不能影响你对编程的看法,那么这个语言不值得学习。所以这些年接触了奇奇怪怪的语言:Clojure,Ocaml,Erlang等等。Go 我刚开始看到的时候觉得另类:看起来是 C 系的,不赶时髦,支持的功能异常少。但是有理由相信这是一个工程导向的,年轻的语言,没有沉重的历史包袱,出生在多核并发时代。
我觉得他会改变我对并发和现代软件工程的看法。
让 Python 加速飞
让 Python 加速飞
Python 是一个开发很快的语言,相应的他不是一个运行速度很快的语言。原因呢,主要是动态类型设计,导致类型需要在运行时检查。在一般的应用中,特别是 IO 密集应用里,性能往往构不成问题。
对于 CPU 密集问题,Python 的科学计算生态其实非常好,得益于 CPython 的 C API,numpy, scipy 已经把科学计算性能提升了一个档次,深度学习基本也是python API的天下了。这些库已经把性能瓶颈从 Python 中剥离了。
其实 Python 最致命的性能问题在于循环,一旦代码中出现了大量循环计算,又没有现成的 numpy 函数可以用,性能往往就会成问题。今天我们介绍两个主要的方法,让 Python 的循环飞起来。这两个工具是:Cython
和 Numba
。
Cython
重新认识 Python(7)CPython初探
重新认识 Python(7)CPython初探
CPython 是 Python 社区的标准,其他版本的 Python,比如 pypy,都会遵行 CPython 的标准API实现。想要更深入的认识 Python,就需要了解 CPython 实现。这一期,我就带大家认识一下 CPython 源代码,为日后改造 Python 做准备。首先,展示如何本地编译最新的 CPython代码。然后,展示如何 debug 编译好的解释器。最后我们会利用 CPython 实现简单的函数调用。
本文会为你揭开 CPython 的面纱,带你进入 C + Python 的世界。文章的最后,你也会对 Python 中最重要的概念:一切皆对象(object)有更深刻的认识;你还会发现一点点线索,为什么Python用起来比其他语言,比如 C 慢很多。
请打开编辑器和命令行,我们开始。(本文主要使用MacOS,Windows 不一定可以直接实现)。
当我们再说 Python,我们在说什么?
重新认识 Python(5)再谈并发
重新认识 Python(5):再谈并发
之前写了一个关于Python并发模型的小文,主要讨论利用协程实现并发的一些基本方法和规则,文章的重点是 coroutine 的使用。这两天琢磨了一下为什么 Python 要提出基于协程的并发模型,以及跟线程、进程实现的并发有什么区别和联系?最后,我还想简单讨论一下这三种并发模型是否协调在一起工作。
进程、线程、协程并发的特点
首先明确明确一点,Python一般的协程库,比如 asyncio
,不存在任何并行,即一个时间只有一个任务(协程或者普通函数)在运行。而线程和进程在多核CPU的情况下通常是存在并行的,不过由于Python的GIL,Python的线程不存在并行计算,即使运行在多核CPU上。
我们再来看这三个模型的特点。