1、操作系统编写的语言:汇编语言,C语言
2、 wins: cmd其实就是一个软件与操作系统打交道
linux:shell解释器
3、现在摩尔定律越来越不适用了,所以会出现技术革新,比如出现go语言,但并未找到真正更好的办法
4、双击(启动程序)也叫交互式
5、进程的创建 :操作系统底层会调用不同的接口
6、 io阻塞是为了:提升效率
cpu时间过长:降低一点效率,但为了让用户感觉到并发
7、超时(timeout)
为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数。在默认情况下,除非显式指定了 timeout 值,requests 是不会自动进行超时处理的。如果没有 timeout,你的代码可能会挂起若干分钟甚至更长时间。
request timeout
timeout=3 #意思就是超时3s后断开链接
timeout=(3,7) #timeout传入一个元组(3,7)第一位是connect连接的超时时间,第二位是read读取的超时时间
8、多进程一般都设置为守护进程
9、程序运行理想状态:让代码永远处于就绪态和运行态之间切换
10、进程与进程之间数据默认情况下是无法直接交互的,如果想交互可以借助第三方工具、模块
11、 python解释器内部的包都是用面向对象封装的
12、实现不同机器上通信:
利用第三方专业的消息队列:
比如:rabbitmq(吞吐量没kafka高,有消息确认机制), kafka(吞吐量高,无消息确认机制), redis
13、解耦合,消息队列是微服务的基础
14、线程没有id号(可造虚拟id方便线程用,但在任务管理器里是查不到),但有名字 t.name()或t.getName()获取名字
进程有id号,可在任务管理器里查到
15、若几个线程都属于同一进程,所以id相同
16、GIL的用途:py的垃圾回收机制是线程不安全的(py是解释型语言),cpython的多线程不是真正的多线程,同一时刻,只有一个线程在执行,不能利用多核优势
17、编译型语言(比如python) 是线程安全的
18、分布式锁可能会遇到死锁现象
19、运行程序最理想的状态:
进程下开多线程 多线程下再利用协程,最大程度的提升团建运行效率
20、多核多线程比单核多线程更差,IO密集型用多线程,CPU(计算)密集型用多进程
21、自己研究: FastApi,django3.0,sanic,tornado:支持异步,有协程
22、io多路复用是阻塞式IO,有阻塞的过程就是阻塞式IO
23、协程 : 保存状态 +切换