老规矩,先理解概念
冯诺依曼体系:
输入设备:键盘、鼠标
存储器:内存
输出设备:显示器、投影仪、打印机
程序:一个包含了代码片被编译后的文件
进程:系统通过解析程序文件加载到内存中的对象,进程是资源分配和调度的基本单位(分配cpu, 分配内存大小,它由系统进行调度),进程中包含指令(if, for…)、数据(变量,函数…)、线程(他也是线程的容器),他是操作系统结构的基础。
线程:进程中真正干活的人,线程是资源调度的最小单元,是程序执行流的最小单元,线程中包含线程id、当前指令的指针(线程会切换,再次运行还能从阻塞的位置继续),寄存器集合(线程切换,这个线程执行的结果进行保存)、堆栈(栈是先进后出,执行一个函数要先生成函数对象->函数压栈->变量引用压栈->调用函数->弹出栈顶,线程执行的其实也就是函数中大代码片,从Thread的target参数就能看出来,它接收的是一个函数或则方法)
进程
注释:
1:每一个进程都认为自己独占所有的计算机硬件资源()
2: 进程间不共享数据(这里就要解决进程间通信的问题)
线程
注释:上边已经大致讲了一下线程,这里再说一下线程的特点
1:一个进程中可以有多个线程,同一个进程中的线程共享数据资源(这里需要学好python中的作用域,因为python是用作用域来控制进程中的资源。另外就是先做一个预热,既然共享资源就会出现线程安全的问题)
2:每一个线程拥有自己独立的堆栈。
3:线程的几种状态(就绪:处于没有结束,也没有在执行中间的一个状态。运行:正在执行代码片。阻塞:它在等待系统的处理结果,比如系统在执行IO。 终止:执行完成或则退出或则被取消)
4:python线程没有优先级、没有线程组的概念。
python-线程开发(threading库)
threading的属性和方法
current_thread()
main_thread()
active_count()
enumerate()
get_ident
Thread类->线程对象
Thread(target, name, args, kwargs)
Thread对象的方法
name
ident
is_alive()
启动: start()与run()(start:启动线程唯一的方法。 run:等价于普通的调用函数)
结束:python没有提供线程终止的方法(线程终止1:代码片中出现异常 2:线程执行完成 3:对于循环的代码片捕获到某个标记break了)
协程