网络编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。
进程计算机cpu的时间片 : 哪个进程占有cpu,我们就称之为它在cpu时间片上
什么是进程?
多任务编程 : 同时可以利用cpu的多核资源,运行多个任务。多进程和多线程都是多任务编程的具体方法。
从程序的运行本质上,程序分为 IO 密集型 和 cpu密集型程序。
IO : input output 在内存中存在数据交换的部分都叫IO操作 (input print 文件读写 数据库的存取 网络的数据传输)
运算:运算需要使用到cpu 语句的逻辑分析,计算,数学运算,内存运算
IO密集型程序 : IO操作远远大于运算操作,因为cpu效能相对磁盘读写好得多,所以 这类程序 一般 cpu大多状态实在等待 io 运行所以cpu占用很低
CPU密集型 : 程序中运算较多,IO较少,大多数情况下cpu占用比较高
进程:程序的一次执行过程。
程序:指的是一个文件(磁盘中可执行的代码)
进程:是程序被读取到内存中,被操作系统调用时候开始生命周期,执行结束即结束生命周期,是一个过程
进程是占有cpu和内存的
进程的执行过程 (重点)
操作系统内核 ——————> 决定了进程的创建
进程 process
linux 下 创建进程会在内存中自动生成一个 PCB(进程控制块)
PCB : 内存中的一小块空间,功能 用来记录进程的各种信息,包括 pid ,name,调度信息,优先级,状态 虚拟地址空间等
pid:操作系统中每个进程都有一个唯一的ID号,叫做该进程的PID,pid号由系统分派
虚拟地址 : 是计算机系统内存管理的一种技术,是为了每个进程有足够的内存地址可用。
每个进程都拥有独立的4G的虚拟地址空间
进程状态:
三态 :
就绪态: 进程具备运行条件,等待系统分配处理器以便运行.
运行态: 进程占有cpu 正在运行
等待态: 又称为阻塞态或者睡眠态,指进程不具备运行条件,正在等待某事件的完成。
五态 : 在三态基础上增加 新建和终止
新建 :创建一个进程的过程,直接表现为执行某程序,或者程序中进行子进程的创建
终止 :程序执行结束,完成善后。(防止产生僵尸)
ps -aux : 显示系统中进程的详细信息
stat
D:等待态(不可中断) R: 运行态
S: 等待态(可中断) T:停止态(暂停执行)
Z: 僵尸 <: 高有优先级的进程 N: 低优先级
+:前台运行
查看某一进程的信息
ps -ef | grep while
ps -ajx
查看进程树
pstree
父子进程概念:在系统中每一个进程(除了起始进程)都是由父进程创建的,每个进程有唯一的父进程,可能有多个子进程。子进程继承了父进程大部分属性。
动态显示进程信息
top
使用 shift + < > 换页
NI 优先级 : -20 --- 19 数字越小优先级越高
以指定的优先级运行程序
nice -10 ./while.py 以10优先级运行
改变正运行的程序的优先级
renice n pid
e.g. renice 10 4339
将4339号进程优先级改为10
./while.py & 表示将一个程序后台运行
使用fork创建进程
1.导入os 模块
os:标准库模块和操作系统相关
- 使用 os.fork() 创建进程
fork()
功能 : 为当前进程创建一个子进程
参数 : 无
返回值 : 是一个整数有如下几种情况
1.如果返回值是负数 表示进程创建失败
2.如果返回值等于0 表示这是在子进程中返回的
3.如果返回值大于0 表示这是在父进程中返回的
-
子进程和父进程都是独立存在的,在执行上相互不影响
-
利用父子进程中fork返回值的不同加以区分执行内容是固定的方法
-
父进程中返回值是子进程的PID号
- 子进程拥有父进程几乎所有的资源,包括fork前已有的变量
os.getpid():获取当前进程的PID号
os.getppid():获取当前进程父进程的进程号
进程退出函数
os._exit([status]) 直接退出当前进程
sys.exit([status]) 抛出SyetemExit异常,如果异常不被处理则进程结束
参数 : 表示进程退出状态,如果不传或者传入0 表示进程正常退出,如果传入一个正整数表示非正常退出。如果传入一个非数字则会打印
僵尸处理
僵尸进程 : 进程已经结束,但是在系统中任然保存这该进程的pcb信息,会占用一定的内存。
产生原因:子进程先于父进程退出,父进程没有进行处理。这时子进程就会成为 僵尸进程。僵尸进程是我们不希望的
孤儿进程 : 父进程先退出,此时子进程就会变为孤儿进程。孤儿进程会被系统专有进程进行收养,并且负责在该孤儿进程退出时 “收尸”。所以孤儿进程并没有影响
僵尸进程的处理方法:
- 父进程使用os.wait 或者 os.waitpid 进行处理
- 创建二级子进程,让一级子进程退出,则二级子进程成为孤儿
- 父进程使用信号处理方式处理子进程信号
os.wait()
功能:阻塞等待子进程的退出,只要该父进程有任意子进程退出,则结束阻塞。
参数: 无
返回值: 包含两个元素的元组,第一个是退出的子进程的PID,第二个是退出的子进程相关的退出码
os.waitpid(pid,options)
功能:等待子进程退出
参数: pid -1 表示任何一个子进程退出都可以
0 表示等待指定的子进程退出
options 0 表示始终阻塞等待
WNOHANG : 非阻塞等待
返回值:和wait相同 包含两个元素的元组,第一个是退出的子进程的PID(如果WNOHANG 则可能是0),第二个是退出的子进程相关的退出码
wait() ==== waitpid(-1,0)
作业 :
有一个文件需要拷贝,将其拷贝为两份,第一份是前半部分内容,第二份是后半部分内容。要求用父子进程同时进行拷贝
以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装