========阶段性回顾======

一、网络编程:编程

    socket----recv  send方法网络

         socketserver---多线程下的socket多线程

         接收大数据--方式:先发送长度,接收端接收该长度异步

    防止粘包---方式1,发送接收交替进行 方式2,最后一次接收可变长度socket

二、多线程大数据

         threading---启动多线程方法,join线程

    守护线程--setDemo(True)主线程结束,启动的守护线程跟着结束server

    GIL锁---同一时刻只有一个线程得到CPU计算资源。一、获取时间片二、得到GIL锁  在单核处理器上第2个条件永远知足协程

    互斥锁--同一时刻只有一个线程修改共享变量递归

         递归锁--声明同一个锁进嵌套的三个门,这个锁就要用递归锁

    信号量--同一时刻运行n个线程修改共享变量   n=1,2,3,4...

         多线程的协调--event,set标志位,clear标志位,wait标志位,isset方法。  若是标志位isset就前进,不然停下wait标志位

三、生成者消费者队列

    生产者能够有多个线程,消费者能够多个线程。消费者者不停处理队列中的数据,生产者不停往队列里放数据

四、多进程

   multiprocessing--父进程ID:os.getppid() 本进程ID:os.getpid() 进程占资源不能无限启动,有进程池:只能同时运行n个进程。

          进程间数据传递:Queue、Pipe 进程间数据共享:Manager

五、协程

   gevent---是对greenlet的封装,greenlet有switch方法,遇到IO手动切换,gevent是对其的封装,能够自动检测到IO自动切换

        gevent有joinall方法,标记IO操做:monkey.patch_all()

六、协程的实现

  数据的内核态,用户态。拿recv方法来讲,send完成后recv的数据就准备好了,调用recv方法就将数据从内核内存空间拷贝到用户内存空间。

  阻塞IO(没数据接收就阻塞)  非阻塞IO(没数据接收抛异常)  同步IO(阻塞IO,非阻塞IO,IO多路复用/事件驱动型IO 都是同步IO)  异步IO(彻底不阻塞理论上的)

       协程的实现方式:IO多路复用。 遇到一个IO就注册一个事件,监测这些事件,执行完成的就返回

       IO多路复用三种实现方式:select、poll、epoll

   epoll和gevent同样, 在Linux底层都是libevent.so实现的

相关文章
相关标签/搜索