1.Tcp粘包问题
2.udp
区别:不粘包,不可靠,传输效率高,适合数据量小的传输,不要求传输数据的顺序不需要建立链接
使用场景,对速度要求高,但是对数据完整性要求不高,dns,对战类游戏
网络编程:目前 无法并发处理多个客户端
进程:
一个正在运行中的程序称之为进程
进程来自于操作系统
在第三代操作系统中,诞生了多到技术
多道技术是为了提高计算机资源的利用率,第三代以前是穿行执行任务的批量处理方式
空间复用
同一时间段内在内存中储存多个程序的数据
内存区域要相互隔离,物理隔离,你是不可以随意访问的
时间复用
切换+保存
当一个进程遇到IO操作时,就切换其他进程来执行,切换之前要记录当前运行的状态
切换条件:
遇到IO操作
运行时间过长,时间片用完了
什么时候要开启进程
当执行一个任务时,执行时间过长,为了提高效率,我们就可以将这个任务交给子进程去完成
Linux与Windows开启子进程的区别
linux 会把数据完整copy给子进程 ,作为子进程的初始状态 windows 会重新导入父进程的代码来获取需要数据,这样一来创建进程的代码又被执行了一次,造成递归创建进程 所以要将开启子进程的代码放到 if __name__ == "__main__":中 保证创建进程的代码只被父进程执行 如何开启子进程 1.导入 multiprocessing 中的 Process 实例化Process类 用target来指定要执行任务函数 调用start来开启进程 2.创建一个类,继承Process,覆盖run方法,将任务代码放到run中 进程之间内存相互隔离 僵尸进程 有害 子进程结束了,父进程还在运行,子进程会占用pid 并且将保留最后的运行状态在内存中 在linux中 父进程需要调用wait/waitpid来获取子进程的残留信息,并清理它 python中已经封装好了 wait 操作不需要我们自己来清理 如果出现很多僵尸进程 清除僵尸进程的方法就是 杀死父进程 孤儿 父进程已经挂了 ,子进程还在运行,会被移交给操作系统来管理 常用属性: join 父进程等待子进程运行结束 其实是提高子进程的优先级 is_alive 是否存活 getpid 获取自己的进程id name 进程的名字 daemon terminate 终止这个子进程 有延迟 start 启动进程 有延迟 因为开启和关闭进程 都是操作系统来完成 进程的状态 运行 -io> 阻塞 -> 就绪态 运行 -时间片用完了(运行时间过长)> 就绪态 阻塞 当程序遇到了IO操作,就进入了阻塞态 非阻塞 程序正在运行中,没有任何IO操作 指的是程序的运行状态 并行 多个程序同时运行,是真正的同时执行,仅在多核中会出现 并发 多个事件同时发生了,看起来像是都在运行,本质上是切换执行 程序员永恒的话题 提高程序的效率 减少IO 力求尽可能多占用CPU