Selector 模型
    
            
摘要:1.服务器端: 客户端: 运行结果: 多连接可以并发。 多个用户接入:
        
阅读全文
                posted @ 
2017-08-18 14:47 
momo8238
        
阅读(363) 
         
        推荐(0)     
             
            
            
    用select模拟一个socket server成型版2
    
            
摘要:1.字典队列测试 运行结果: 2. 服务器端代码: 客户端代码:
        
阅读全文
                posted @ 
2017-08-18 11:33 
momo8238
        
阅读(128) 
         
        推荐(0)     
             
            
            
    用select模拟一个socket server成型版
    
            
摘要:1.你往output里面放什么,下次循环就出什么。 2. 1.服务器端:实现了收和发的分开进行 客户端: 运行结果:当一个客户端断开时,服务器端也会报错。下面的完整版摘自老师的博客。 2. 服务器端 客户端:
        
阅读全文
                posted @ 
2017-08-18 10:17 
momo8238
        
阅读(153) 
         
        推荐(0)     
             
            
            
    用select模拟一个socket server
    
            
摘要:1, 必须在非阻塞模式下,才能实现IO的多路复用,否则一个卡住就都卡住了。(单线程下的多路复用) 先检测自己,现在没有客户端连进来,所以会卡住。 运行结果: 2. 客户端代码: 服务器端: 运行结果:fd=240 文件描述符 3. 客户端: 运行结果: 至此链接已经建立。 4.最终版本 服务器端: 
        
阅读全文
                posted @ 
2017-08-17 22:20 
momo8238
        
阅读(302) 
         
        推荐(0)     
             
            
            
    用select (多路复用)模拟一个 socket server
    
            
摘要:需求:用select (多路复用)模拟一个 socket server。可以接收多并发。 1. 一开始是检测自己,如果我有活动了,就说明有客户端要连我了。 运行结果:卡住了,有客户端进来时才会不卡。 2.服务器端 客户端: 运行结果: 有2个链接的情况下,无法多次接收数据 3. server端进行修
        
阅读全文
                posted @ 
2017-08-17 20:45 
momo8238
        
阅读(336) 
         
        推荐(0)     
             
            
            
    IO模式
    
            
摘要:二 IO模式 刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段: 1. 等待数据准备 (Waiting for the data to be ready) 
        
阅读全文
                posted @ 
2017-08-17 17:30 
momo8238
        
阅读(269) 
         
        推荐(0)     
             
            
            
    IO多路复用
    
            
摘要:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间
        
阅读全文
                posted @ 
2017-08-17 16:38 
momo8238
        
阅读(139) 
         
        推荐(0)     
             
            
            
    进程、线程和协程的理解
    
            
摘要:转自 http://blog.leiqin.info/2012/12/02/%E8%BF%9B%E7%A8%8B-%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B%E7%9A%84%E7%90%86%E8%A7%A3.html 进程、线程和协程的理解 进程、
        
阅读全文
                posted @ 
2017-08-17 08:59 
momo8238
        
阅读(149) 
         
        推荐(0)     
             
            
            
    进程、线程和协程--自己的理解
    
            
摘要:1. IO 操作不占用CPU(从硬盘读数据,从网络读数据,从内存读取数据) 计算占用CPU,例如1+1=2的计算就是占用CPU的。 python 多线程,不适合CPU密集操作系统的任务,适合IO操作密集型的任务。 2. 进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程
        
阅读全文
                posted @ 
2017-08-17 08:41 
momo8238
        
阅读(388) 
         
        推荐(0)     
             
            
            
    Select-poll-epoll-简介
    
            
摘要:1。 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个长循
        
阅读全文
                posted @ 
2017-08-16 15:53 
momo8238
        
阅读(220) 
         
        推荐(0)     
             
            
            
    事件驱动与异步IO--待更新
    
            
摘要:论事件驱动与异步IO 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求; (2)每收到一个请求,创建一个新的线程,来处理该请求; (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求。(启动一个协程) 上面的几种方式
        
阅读全文
                posted @ 
2017-08-16 14:01 
momo8238
        
阅读(152) 
         
        推荐(0)     
             
            
            
    Gevent-socket
    
            
摘要:1. 通过Gevent实现单线程下的多socket并发。 server 端: Client 端: 运行结果:实现了并发 2.
        
阅读全文
                posted @ 
2017-08-16 11:53 
momo8238
        
阅读(424) 
         
        推荐(0)     
             
            
            
    Urllib--爬虫
    
            
摘要:1.简单爬虫 运行结果: 2.爬多个网页 运行结果: 3.测试运行时间: 运行结果:通过时间看到也是串行运行的。gevent默认检测不到 urllib 进行的是否是io操作。 4.同步与异步的时间比较: 运行时间:几乎差不多,看不出异步的优势。 5.因为gevent默认检测不到 urllib 进行的
        
阅读全文
                posted @ 
2017-08-16 11:33 
momo8238
        
阅读(182) 
         
        推荐(0)     
             
            
            
    Gevent-自动挡切换
    
            
摘要:Gevent: Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用sw
        
阅读全文
                posted @ 
2017-08-16 10:53 
momo8238
        
阅读(223) 
         
        推荐(0)     
             
            
            
    Greenlet-手动切换
    
            
摘要:yield()是自己写的协程,Greenlet( )是已经封装好了的协程。 协程:遇到 I/O 操作就切换到别的地方了(先去处理其他携程去了)。等原协程的 I/O 操作一完成就切回去。这样就把 I/O的时间给节省出来了。 Greenlet:手动挡 gevent: 自动挡 运行结果:
        
阅读全文
                posted @ 
2017-08-16 06:34 
momo8238
        
阅读(220) 
         
        推荐(0)     
             
            
            
    协程-Greenlet
    
            
摘要:协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。 线程切换的时候会保存到CPU里面。 因此: 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上
        
阅读全文
                posted @ 
2017-08-16 06:21 
momo8238
        
阅读(207) 
         
        推荐(0)     
             
            
            
    协程简介-异步IO
    
            
摘要:协程 1. 协程,又称微线程,纤程。协程是用户自己控制的,CPU根本不知道协程的存在,CPU只认识线程。 2. 线程切换的时候,会保存在CPU的寄存器里面。 协程切换的时候,却都是由用户自己的实现的。 3。在单线程下实现并发的效果,就是通过协程来完成的。例如yield() 英文名Coroutine。
        
阅读全文
                posted @ 
2017-08-15 15:31 
momo8238
        
阅读(252) 
         
        推荐(0)     
             
            
            
    关于__name__=='__main__
    
            
摘要:if __name__=='__main__' : 为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用。 如果是主动执行,则执行。如果是调用的,则不执行主体。 里面存放的可能是一些测试模块。 可以通过用print(__name__) 来测试 __name__ 是否等于 __main_
        
阅读全文
                posted @ 
2017-08-15 08:11 
momo8238
        
阅读(94) 
         
        推荐(0)     
             
            
            
    进程池-限制同一时间在CPU上运行的进程数
    
            
摘要:if __name__=='__main__' : 为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用。 如果是主动执行,则执行。如果是调用的,则不执行主体。 1. 串行:切记切记:pool.close()必须在pool.join() 之前。 运行结果: 2. 5个一组并行执行 运行
        
阅读全文
                posted @ 
2017-08-14 17:22 
momo8238
        
阅读(365) 
         
        推荐(0)     
             
            
            
    进程同步-进程内部也需要锁
    
            
摘要:进程内部也需要锁。进程之间不能相互访问,为什么还需要锁??? 因为他们是屏幕共享的,所以需要加个锁。防止打印出来是混乱的。 运行结果:
        
阅读全文
                posted @ 
2017-08-14 16:16 
momo8238
        
阅读(274) 
         
        推荐(0)