进程 fork

回忆

 

1.HTTPSERVER(HTTP协议+tcp套接字)

2.接收浏览器发来的请求

3.查看请求内容

阻塞IO

非阻塞IO

            f.flush()

IO多路复用

  目的:在程序中有多个IO事件的时候,同时监控,那个能执行就执行那个,提高效率

 

----------------------------------------

8.09笔记

epoll

使用方法:代码与poll基本一致

将生成的对象改为p=epoll()

将关注事件类别名称改为epoll的关注事件类别

 

区别:epoll相对poll更新,效率高于select 和poll(epoll直接选出哪个io事件要执行)

epoll的触发机制更多  (多一个epollet,边缘触发)

 

 

本地套接字

linux下文件类型

b(块设备文件)  c(字符设备文件)

d(目录)  -(普通文件)  1(链接文件)

s(套接字文件)  p(管道文件)

 

本地套接字作用:用于本地不同程序间进行数据传输(以内存为介质)

 

本地套接字传输流程

1.创建套接字对象

  sockfd = socket(AF_UNIX,SOCK_STREAM)

2.绑定套接字文件,如果文件不存在则自动保存

  sockfd.bind(file)

3.监听listen

4.收发消息recv send

 

补充:

os.path.exists(file)

功能:判断一个文件是否存在

参数:文件

返回值:存在 true  不存在false

os.remove()

os.unlink()

功能:删除一个文件

参数:要删除的文件

 

网络基础总结

理论:1.osi七层模型 tcp/udp模型

    2.tcp和udp的区别和特征

    3.三次握手和四次挥手的过程和每一次作用

    4.什么是io多路复用,io的基本形态

    5.套接字的种类,套接字类型的区别

程序实践:1.tcp套接字传输的基本模型

        2.udp套接字传输基本模型

        3.IO多路复写select poll的使用

        4.http协议基本原理的实现

 

多任务编程

意义:充分利用计算机资源,同时运行多个任务,提高程序的运行效率

定义:通过程序利用计算机的多个核心达到同时执行多个任务的目的,以此达到提升程序运行效率的目的

实施方案:多进程编程  多线程编程 (利用计算机的多个核心)

 

并行:多个计算机核心在同时处理多个任务,这时多个任务之间是并行关系 2+2

占有更多的资源

并发:同时运行多个任务,内核在多个任务间不断切换,达到多个任务都会被执行的处理效果,此时多个任务间是并发关系   5+1

1个内核处理一个任务 

 

进程:程序在计算中的一次执行过程  (一次)

程序:是一个可执行文件,是静态的,占有磁盘,不占计算机资源

进程:是一个动态的过程,占有计算机资源,有一定的生命周期

 

解释:同一个程序不同的运行过程是不同的进程,因为分配的资源和生命周期各不相同

进程的创建流程

1.用户启动一个程序或者调用借口发起进程创建

2.操作系统接收用户分配计算机资源创建进程

3.操作系统将一定状态的进程提供给用户使用

4.用户利用操作系统提供的进程完成任务

    `

cpu时间片

如果一个进程占有cpu此时我们称为该进程占有cpu时间片(时间片是毫秒级的)

多个进程任务会轮流占cpu时间片形成并发效果

 

进程信息(process)

pcb(进程控制块):进程创建后会自动在内存生产一个空间存放进程信息

进程信息:进程的id

查看你系统该进程信息

ps -aux

pid(process id):在操作系统中每个进程都有唯一的pid值  由系统分配  

 

进程特征:1.进程是操作系统分配资源的最小单元

        2.每个进程有自己独立的运行空间(空间指的是虚拟内存空间,不是物理内存为了扩展地址)

        3.进程之间运行相互独立互不影响

 

进程的状态:

         1.三态

           就绪态:进程具备执行条件,等待系统分配处理器资源进入状态

           运行态:进程占有cpu处于运行状态

           等待态:进程暂时不具备运行条件,需要阻塞等待

         2.五态

           新建:创建一个新的进程,获取系统资源的过程

           终止:进程执行结束,释放资源的过程

ps -aux  stat

D:等待态 阻塞  不可中断等待态  

S:等待态 睡眠  可中断等待态

T:等待态 暂停  暂停执行

R:运行态(就绪态)

Z:僵尸态

 

+  前台进程(在终端运行,能显示出现象的进程)

<  有较高优先级的进程

N  有较低优先级的进程

s  会话组

l  有进程链接

 

进程的优先级

top 进态查看

优先级的取值范围  -20到19 

 

nice:以指定优先级运行一个程序

nice -9 ./while.py

 

导入解释器 #!/usr/bin/python3  必须在第一行

修改程序可执行权限

chmod 775 whlie.py

可以直接指明路径执行

 

 

父子进程

在系统中除了初始化进程,每个进程都有一个父进程,可能有0个或多个子进程 由此形成进程间的父子关系

每个进程都是有父进程发起请求

便于进程管理,父进程发起创建子进程的请求

查看进程树  pstree

查看父进程  ps -ajx

 

要求:

1.什么是进程,进程和程序的区别

2.了解进程的特征和基本概念

3.理解并发并行的区别

4.清楚进程的状态及转换

 

os.fork 创建进程 很多编程语言都支持

pid = os.fork()

功能:创建进程

返回值:失败返回一个负数  通常不会创建失败,当内存满的时候

      成功:在原有进程中返回新进程的pid号,在新进程中返回0

全部内存空间,包括变量

fork不会无穷无尽

 

总结:

    1.子进程会复制父进程全部内存空间包括代码段

    2.子进程会从fork下一句开始执行

    3.父进程中fork返回值即为新创建子进程的pid号

    4.父子进程不一定谁先执行,执行上互不干扰,抢占时间片

    5.使用if语句结构使父子进程执行不同的代码几乎是fork创建进程的固定结构

    6.在子进程中对变量等其他内容的修改,不会影响父进程中的内容

    7.子进程虽然复制父进程内容,但是也有自己的特有属性特征 比如 pid pcb

 

获取进程pid

   os.getpid()

   功能:获取进程的pid号

   返回值:返回进程的pid号

获取父进程的pid号

   os.getppid()

   功能:获取父进程的pid号

   返回值:返回父进程的pid号

 

进程退出

os._exit(status)   不可逆

功能:退出一个进程

参数:进程的退出状态  整数

 

 

sys.exit([status]) 

功能:退出一个进程

参数:默认为0

    如果传入一个整数则同_exit()传入一个字符串,则在退出时打印该字符串

sys.exit()可以通过捕获 systemexit异常阻止退出

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值