当时选择了python这门语言学习就是因为感觉python对于新手友好,最好上手。python是一门解释型语言,也就是说与C语言这样的编译型语言不同,python与javascript类似,在运行代码的时候并非一次性编译好,而是边运行边由解释器把代码翻译成能被计算机读懂的机器语言。这样一来它的运行速度就不会很快,适用于对于运行速度要求不是特别苛刻的情况下。python语言在人工智能、数据分析等领域应用很广泛。用来写后端也是可以的,用来写后端也是我主要学习的方向。
python的解释器常见的有cpython,cpython的垃圾回收机制和GIL锁是两个常会被提及的点。cpython的垃圾回收机制是有三种策略共同使用的,一是计数引用策略,在一个变量被引用的地方多了一次的时候就会将引用数加一;而在引用的地方减少一次的时候也会将引用数相应减一,当引用数为零时,它就会被垃圾清除机制清理掉。不过,当出现循环引用的时候,变量的引用数就永远不会清零,而这时,第二个垃圾回收策略标记策略就派上用场了。标记清除策略是从起点开始,遍历查看哪些资源能够被达到,能够被达到的资源就会被打上标记,而那些没有标记的内容就会被垃圾回收机制清理掉,因为它们是不能被触及到的资源。除此以外,还存在第三种垃圾回收机制,分代收集机制。所有对象分为三代,初始是0代,在垃圾清除中存活下来的内容就会被分为老一代的,而每次垃圾清理的时候都会先从最新的一代内容中进行垃圾清理,老一代的内容只有在最新的一代中不需要的内容都被清理完了之后还需要继续释放内存的时候才会被清理。这里的假设是,在之前垃圾回收过程中存活下来的内容在以后也更有可能会被用到。
python解释器中的GIL锁,也就是全局解释器锁,是用来确保在解释执行过程中线程安全的。其特点就是每一时刻只有一个线程在运行。这样造成的结果就是,不管你在python代码中使用了多少个线程,都达不到真正并行的效果,因为经解释器编译后的代码只有一个在运行的线程。不过这一线程在执行的过程中遇到阻塞或是运行的时间到了一定长度,就会释放资源,而由其他等待运行的任务再去申请争夺这一线程的使用权。