什么是垃圾回收机制?
垃圾回收机制(简称GC)是python解释器中自带的一种机制,专门用来回收不可用的变量值所占用的内存空间。
为什么要有垃圾回收机制?
程序运行需要申请大量的内存空间,一些无用的内存空间如果不及时清理的话就会导致内存使用殆尽也即是内存溢出,导致程序崩溃,但是管理内存又非常繁杂,所以python就做了垃圾回收机制,来管理内存。
#了解垃圾回收机制之前要先了解下,堆区和栈区

#在定义变量时,变量名于变量值都是需要存储的,分别对应内存中的两块区域:堆区和栈区
#1、变量名与值内存地址的关联关系存放于栈区
#2、变量值存放于堆区,内存管理回收的则是堆区的内容。
# 直接引用与间接引用

# 直接引用指的是从栈区出发,直接引用到的内存地址
# 间接引用指的是从栈区出发引用到堆区后,再通过进一步引用才能到达的内存地址。
垃圾回收机制主要是运用了引用计数,即一个变量值的引用计数为0时,才会被当作垃圾回收。
这个机制会产生两个问题:
1,循环引用问题


2,效率问题
分别对应了不同的解决办法,
1,循环引用==》标记-清除
2、效率问题==》分代回收
#问题1、循环引用
也叫交叉引用,就是堆区和栈区没有直接关联了,值不在被任何名字关联,但是值的引用计数并不为0,应该被回收但是没有被回收,此时就用到了标记-清除。

标记-清除算法的做法是当应用程序可用的内存空间被耗尽时,就会停止整个程序,然后进行两项工作,1,标记,2,清除
1、标记
通俗的讲就是栈区相当于根,凡是从根出发可以访达(直接或间接引用)的,都称之为有根之人,就会被标记保留下来,
具体标记的过程就是遍历所有的GC对象,(栈区所有的内容或者线程都可以称之为GC对象),然后将所有的GC对象可以直接或者间接访问到的对象标记为存活的对象,其余的就是非存活对象,应该被清除
2、清除
清除的过程讲遍历堆所有对象,将没有标记的对象全部清除。
问题2、效率问题
基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,这是非常消耗时间的,于是引入了分代回收来提高效率,分代回收采用的是空间换时间的策略
分代回收;
分代回收的核心思想时:在历经多次扫描的情况下都没有被回收的变量,GC机制就会认为,该变量是常用变量,GC对其扫描的频率会降低。
分代指的是根据存活时间来为变量划分不同等级(也即是不同的代)
新定义的量,放到新生代中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么就会把该对象的权重加一,当权重大于设定的值后,会将它移到更高一级都得青春代中
青春代的GC扫描频率低于新生代,这样扫描的变量总个数少了,节省了扫描的总时间,接下来青春代中的对象会以同样的方法移到老年代中,也就是等级更高,越高等级扫描频率越低

虽然分代回收可以提升效率,但也有缺点:
例如一个变量刚升级到青春代,就被解除绑定关系了,该变量就应该被回收,但是青春代的扫描频率降低,就导致它没有被及时的回收清理。
所以没有十全十美的方案,
综上所述
垃圾回收机制是在清理垃圾和释放内存的大背景下,允许分代回收以及极小部分垃圾不会被及时回收为代价,以此换取引用计数整体扫描频率的降低
从而提升其性能,这是空间换时间的解决方案。
接下来学了进程,
进程:正在进行的一个过程或者说一个任务,而负责执行任务则是CPU。它是一个抽象的过程。进程是操作系统最核心的概念。
进程与程序的区别
程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。一个程序执行一次就是一个进程,同一个程序执行两次就是两个进程。
并行与并发:
无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务
一 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发)
二 并行:同时运行,只有具备多个cpu才能实现并行
单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的)
多道技术概念回顾:内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即并发,是伪并行,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)
总结下来就是
串行:一个运行完毕再运行下一个
并行:多个进程是真正意义上一起运行
并发:看起来是同时运行的,本质还是一个个的运行

下面了解了操作系统。
一,为什么要有操作系统,
程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件。
二,什么时操作系统:
1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
三、操作系统与不同软件的区别
1,软件可以有多个类似功能的软件来选择或者替换,或者自己写一个出来,但是操作系统不能随便更改。
2、操作系统与用户程序的差异不在于二者所处的地位,特别的是,操作系统是一个大型,复杂,长寿的软件。而应用程序则不是
接下来学了操作系统的发展史:以下是简略发展史
第一代计算机(1940~1955):真空管和穿孔卡片
略---
第二代计算机(1955~1965):晶体管和批处理系统
略---
第三代计算机(1965~1980):集成电路芯片和多道程序设计
略---
第四代计算机(1980~至今):个人计算机
略---