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

1、网络编程:

    socket----recv  send方法

         socketserver---多线程下的socket

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

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

2、多线程

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

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

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

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

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

扫描二维码关注公众号,回复: 3960230 查看本文章

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

         多线程的协调--event,set标志位,clear标志位,wait标志位,isset方法。  如果标志位isset就前进,否则停下wait标志位

3、生成者消费者队列

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

4、多进程

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

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

5、协程

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

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

6、协程的实现

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

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

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

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

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

   

猜你喜欢

转载自www.cnblogs.com/staff/p/9919148.html