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. 转:adb操作命令详解及大全

    说到 ADB 大家应该都不陌生,即 Android Debug Bridge,Android调试桥,身为 Android 开发的我们,熟练使用 ADB 命令将会大大提升我们的开发效率, ADB 的命令 ...

  2. 线程 task pritce

    1.使用task类创建并执行简单任务: 使用task的构造函数来创建 任务,并调用start方法来启动任务,执行异步操作 aitAll用于等待提供的所有 System.Threading.Tasks. ...

  3. Spring Quartz *.QRTZ_LOCKS' doesn't exist

    ERROR [org.springframework.web.context.ContextLoader] - Context initialization failedorg.springframe ...

  4. ceph-文件存储

    文件存储 ceph文件系统提供了任何大小的符合posix标准的分布式文件系统,它使用Ceph RADOS存储数据.要实现ceph文件系统,需要一个正在运行的ceph存储集群和至少一个ceph元数据服务 ...

  5. centos7 kvm安装使用

    kvm简介 KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的. KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU ...

  6. Eclipse Python插件 PyDev

    PyDev for Eclipse 是一个功能强大且易用的 Eclipse Python IDE 插件.本文将向读者介绍 PyDev 开源项目及其安装配置方法,并在此基础上详细介绍如何利用 PyDev ...

  7. OpenMP常用函数

    1.设置线程数目 定义如下: void omp_set_num_threads(int num_threads); 通过该函数来指定其后用于并行计算的线程数目,其中参数num_threads就是指定的 ...

  8. 第32章 TIM—高级定时器—零死角玩转STM32-F429系列

    第32章     TIM—高级定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  9. BeanNameAware接口和BeanFactoryAware接口(转)

              迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id) ...

  10. ImportError : cannot import name main

    当我们有时候安装不成功插件或者其他模块时候,会有pip报错hu@hu-VirtualBox:~/下载/MySQL-python-1.2.4b4$ pip install pymysqlTracebac ...