OJBK 
 
接着昨天的说 select模块内的epoll函数还没说  说完epoll和本地套接字套接字基本就没了
今天主要是多进程   理论性东西比较多  主要是理解
 
 
 
 
epoll
  • 使用方法:代码与poll基本一致(Python语言中)
  • 将生产的对象改为 epoll = epoll()
  • 将关注事件类别名改为epoll的关注事件类别
         epoll基本所有的方法和常量都一致  再原poll的常量名前加个E
         创建方法改为 epoll()就可以了  这种情况只在Python中才会这么简单
         epoll在别的语言实现比python要复杂的多
    区别:
          epoll 效率要高于select 和 poll
          epoll 的触发机制更多  EPOLLET(边缘触发)
          边缘触发是什么?
                   这就是epoll和poll的区别所在了 为什么说epoll效率会高呢
                   因为epoll的触发机制是在内核中直接完成整个功能 那个事件准备就绪我就直接返回这个IO事件
                   而poll的触发方式是什么呢 是我什么时候有IO准备就绪了我就把整所有的事件都返回
                  返回到应用层后再次做筛选处理  即使你的计算很快 也是会浪费很多事件去处理
 
Linux下文件类型:
      bcd -lsp
         b(快  设备文件)
         c(字符设备文件)
         d(目录)
         -(普通文件)
         l(链接文件)
         s(套接字文件)
         p(管道文件)   
              
本地套接字:
   
   作用:
      用于本地文件不同程序间进行数据传输
   本地套接字传输流程:
      1.创建本地套接字对象
          sockfd = socket(AF_UNIX, SOCK_STREAM)
      2.绑定套接字文件,如果文件不存在则自动创建 存在则报错
         sockfd.bind(file)
      3.监听
         listen
      4.消息收发
         recv send
 
 
os.path.exists(file)
   功能:判断一个文件是否存在
   参数:文件名
   返回值:bool
 
os.remove()
os.unlink()
   功能:删除文件
   阐述:要删除的文件
 
 
 
 
网络基础总结:
   理论:
     1.OSI七成模型  tcp/ip模型
     2.tcp 和 UDP的区别和特性
     3.三次握手和四次挥手的过程和每一次的作用
     4.什么是IO多路复用
     5.套接字的种类,套接字类型的区别
   程序实践;
     1.tcp套接字传输的基本模型
     2.udp套接字传输的基本模型
     3.IO多路复用select、poll
     4.HTTP协议基本原理的时间
 
多任务编程:
   意义:
     充分利用计算机资源,同时运行多个任务,
     提高程序整体的运行效率
   定义:
     通过程序利用计算机的多个核心达到同时执行多个任务的目的
     因此达到提升程序运行效率的目的
   实施方案:
     多进程编程
     多线程编程
     并行:
        多个计算机核心在同时处理多个任务,
这时多个任务之间是并行关系
     并发:
        同时运行多个任务,内核在多个任务之间的不断切换,
达到多个任务都会执行的处理效果
此时多个任务之间是并发关系
 
进程:
    程序在计算机中的一次执行过程
 
程序:
    是一个可执行文件,是静态的,只占有磁盘
    不占用计算机运行资源
进程:
    是一个动态过程,占有一定的计算机资源
    有一定的生命周期
注:
    同一个程序不同的运行过程是不同的进程,
    因为分配的资源和生命周期都不同
 
进程的创建过程:
    1.用户启动一个程序,或是调用接口发起进程创建
    2.操作系统接收用户请求分配计算机资源创建进程
    3.操作系统将一定状态的进程提供给用户使用
    4.用户利用操作提供的进程完成任务
CPU时间片:
    如果有个进程占有CPU此时我们称为该进程占有CPU的时间片
    多个进程任务或轮流占有CPU时间片并形成并发效果
  
进程信息(process)
    PCB(进程控制块):
         进程创建后 会自动在内存中产生一个空间存放进程信息
    进程信息:
        进程ID 进程占有内存的位置  创建时间、创建位置
查看系统进程信息:ps -aux
    PID(process ID):
      在操作系统中每个进程都有唯一的PID值是由系统分配的
进程特征:
    进程是操作系统分配资源的最小单元
    每个进程拥有自己独立的运行空间(4个G的虚拟内存空间)
    进程之间相互独立各不影响
进程的状态:
    三态:
    就绪状态:
         进程具备执行条件,等待系统分配处理器资源进入运行态
    运行态:
         进程占有CPU处于运行状态
    等待态:
         进程暂时不具备运行条件,需要阻塞等待
 
    五态:
         在三态的基础上增加新建和终止态 
 新建:
   创建一个新的程序,获取系统资源的过程
 终止:
   进程执行结束,释放资源的过程
 
ps -aux   查询结果的 STAT表示进程状态:
    D  等待态  阻塞  不可中断等待态
    S  等待态  睡眠  可中断等待态
    T  等待态  暂停  暂停执行
    R  运行态(就绪态)
    Z  僵尸
      +  前台进程(在终端运行)
      <  有较高优先级的进程
      N  较低优先级的进程
       s  回话组
       l  有子进程链接
进程的优先级:
    top 查看进程运行态优先级
    取值范围:-20~19   -20最高
    nice:
       以指定的优先级运行一个程序
       nice -9 ./hello.py  以9的优先级运行
       sudo nice --9 ./hello.py 以-9优先级运行
 
    首行添加 #! /usr/bin/python3  指定执行器
      执行:./hello.py
    修改程序权限添加可执行权限
         chmod    775     hello.py
 
父子进程:
    在系统中除了初始化进程外每个进程都有一个父进程,可能有0个或多个子进程
    由此行成进程间的父子关系
    便于进程管理,父进程发起创建进程请求
    查看进程树:pstree
    查看父子进程ID:ps -ajx
 
 
 
os.fork 创建进程
    pid = os.fork()
        功能:创建进程
        返回值:
    失败:返回一个负数
    成功:
       在原有进程中返回新有进程PID号
       在新进程中返回0
子进程会复制父进程内部全部内存空间包括代码段
子进程会从fork的下一句开始执行
父进程中fork返回值即为新创创建子进程的PID号
使用if语句结构使父子进程进行不同代码段的运行
在子进程中对变量等其他内容的修改, 不会影响父进程中的内容
子进程虽然复制父进程内容,但是也有自己的特有属性特征
  如:PID号  PCB  内存区间
 
获取进程的PID
  os.getpid()
     功能:获取进程的PID号
     返回值:返回进程的PID号
  os.getppid()
     功能:获取父进程的PID
     返回值:返回父进程的ID号
进程退出:
  os.exit(status)
    功能:退出一个进程
    参数:进程的退出状态  整数
  sys.exit([status])
    功能:退出一个进程
    参数:默认为0
          如果传入一个整数如同_exit()
  传入一个字符串,则在退出时打印该字符串
    sys.exit() 可以通过捕获 SystemExit异常退出
 
 
 
 
什么是进程 进程和程序的区别?
     进程是一种动态描述 是程序运行的一次过程
     进程是程序在运行过程中的形态 它占有一定的独立内存空间
     进程占用CPU及系统资源  而程序不会 程序是静态的 它只会占用磁盘空间
 
进程的特征和基本概念?
        进程是计算机内存资源分配的最小资源
        每个进程在内存中都有各自各自独立的运行空间
        并且每个进程之间互不影响
 
并发并行的区别?
并行是不同系统核心同时进行进程的运行 两个进程之间的关系叫做并行
并发是同一个系统核心进行轮流切换进程的过程叫做并发
并行是有多个进程同时运行 而并发只能同时运行一个进程
 
 
进程 fork理解?
  • 进程fork是一个创建子进程的os模块函数
  • 他能够在只运行一个程序的情况下 创建多个进程并运行
  • 创建出来的进程叫做该进程的子进程 并且子进程与父进程是并发运行
  • 谁先占有资源谁先运行 没有顺序之分
  • 创建子进程有三个结果创建失败返回负数、成功返回0、正数(代表原有进程ID)
  • 如果创建子进程成功 返回值为该子进程的ID 并且在该子进程中返回0
  • 其实就是创建成功时返回原进程ID 当子进程独立运行时在子进程内返回0
  • 子进程创建成功后悔会在内存中开辟以个新的空间 此空间内的所有代码和参数
  • 都会复制父进程的   但是有自己的进程属性  是独立进程  子进程的所有操作不会影响父进程
  • 在创建子进程后运行位置是从fork函数return后开始执行的
  • 利用if结构就能达到多进程同时运行同程序内的不同代码段
  • 这样就能大大提高程序的执行效率

由此可以看出:

import os
import time
pid = os.fork() if pid < 0:
print("失败")
elif pid == 0:
print("成功")
print(pid)
time.sleep(2)
print(pid)
else:
time.sleep(5)
print("原进程")
print(pid)

Python网络编程(epoll内核监听,多任务多进程)的更多相关文章

  1. python 网络编程 IO多路复用之epoll

    python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...

  2. python网络编程——IO多路复用之select

    1 IO多路复用的概念 原生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收发数据(调用recv.send.sendall)时也是阻塞的.原生so ...

  3. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  4. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  5. UNIX网络编程——epoll 的accept , read, write(重要)

    在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK). 从字面上看,意思是: EAGAIN: 再试一次 E ...

  6. 28、Python网络编程

    一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...

  7. python 网络编程:socket

    在学习socket之前,我们先复习下相关的网络知识. OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.OSI七层模型是由国际标准化组织ISO定义的网络的基本结构,不仅包括一 ...

  8. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  9. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

随机推荐

  1. ACM Arabella Collegiate Programming Contest 2015 H. Capital City 边连通分量

    题目链接:http://codeforces.com/gym/100676/attachments 题意: 有 n 个点,m 条边,图中,边强连通分量之间可以直达,即距离为 0 ,找一个点当做首都,其 ...

  2. python 面向对象(四)--实例属性和类属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...

  3. 线程 task训练

    1. task类表示一个线程,最简单的task的构造方法是 ,参数是Action<t>,是一个无返回值的泛型委托. 指向要执行的函数.当调用·start()方法时,就执行子线程.执行指向的 ...

  4. ZooKeeper 完全分布式集群环境搭建

    1. 搭建前准备 示例共三台主机,主机IP映射信息如下: 192.168.32.101 s1 192.168.32.102 s2 192.168.32.103 s3 2.下载ZooKeeper, 以  ...

  5. AI-Info-Micron-Insight:V2X 自主性:帮助减少事故、排放和交通拥堵

    ylbtech-AI-Info-Micron-Insight:V2X 自主性:帮助减少事故.排放和交通拥堵 1.返回顶部 1. V2X 自主性:帮助减少事故.排放和交通拥堵 一辆汽车冲到你的车道上.晚 ...

  6. Eclipse使用的小技巧

    1.在右键new菜单栏中添加新建JSP文件 window->perspective->customize perspective->shortcuts->web->把JS ...

  7. mpvue项目中安装weui

    观察一下发现,mpvue项目打包css的规律是:根组件App.vue里的style样式全部打包到 dist  /  static / css / app.wxss ..   参照微信小程序的原生引入使 ...

  8. lintcode 110最小路径和

    最小路径和   描述 笔记 数据 评测 给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径. 注意事项 你在同一时间只能向下或者向右移动一步 您在真实的面试中是否遇到过 ...

  9. docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群

    一.部署环境 序号 hostname ip 备注 1 manager107 10.0.3.107 centos7;3.10.0-957.1.3.el7.x86_64 2 worker68 10.0.3 ...

  10. SSH 登录时出现如下错误:No supported key exchange algorithms

    https://help.aliyun.com/knowledge_detail/41486.html