山西省建设局网站,上海家居网站建设,服务器做网站哪个系统好,提供手机自适应网站建设维护select版-TCP服务器 1. select 原理 在多路复用的模型中#xff0c;比较常用的有select模型和epoll模型。这两个都是系统接口#xff0c;由操作系统提供。当然#xff0c;Python的select模块进行了更高级的封装。 将需要判断有数据传来的#xff08;可读的#xff09;sock…select版-TCP服务器 1. select 原理 在多路复用的模型中比较常用的有select模型和epoll模型。这两个都是系统接口由操作系统提供。当然Python的select模块进行了更高级的封装。 将需要判断有数据传来的可读的socket、可以向外发送数据的可写的socket及发生异常状态的socket交给selectselect会帮助我们从中遍历找出有事件发生的socket并返回给我们我们可以直接处理这些发生事件的socket。 2. 总结
优点 select目前几乎在所有的平台上支持其良好跨平台支持也是它的一个优点。 缺点 select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制在Linux上一般为1024可以通过修改宏定义甚至重新编译内核的方式提升这一限制但是这样也会造成效率的降低。
一般来说这个数目和系统内存关系很大具体数目可以cat /proc/sys/fs/file-max察看。32位机默认是1024个。64位机默认是2048. 对socket进行扫描时是依次扫描的即采用轮询的方法效率较低。
当套接字比较多的时候每次select()都要通过遍历FD_SETSIZE个Socket来完成调度不管哪个Socket是活跃的都遍历一遍。这会浪费很多CPU时间。 gevent
greenlet已经实现了协程但是这个还的人工切换是不是觉得太麻烦了不要捉急python还有一个比greenlet更强大的并且能够自动切换任务的模块gevent 其原理是当一个greenlet遇到IO(指的是input output输入输出比如网络、文件操作等)操作时比如访问网络就自动切换到其他的greenlet等到IO操作完成再在适当的时候切换回来继续执行。 由于IO操作非常耗时经常使程序处于等待状态有了gevent为我们自动切换协程就保证总有greenlet在运行而不是等待IO 本身睡觉时间gecent.sleep()