Python epoll(IO的多路复用)

  1. 查看socket有无数据,把socket传给内核,内核再传给 cpu,太过消耗性能。

  2. epoll的作用:epoll内部使用了mmap共享了用户和内核的部分空间,避免了数据的来回拷贝,用来存放socket,内核监听共享内存哪个套接字有数据,通过epoll.epoll()方法,拿到有数据的套接字,交给程序。( 共享内存存的是一个个文件描述符,那个文件描述符对应的套接字有数据,可以想象这个文件描述符亮了。)

  3. select:select 只能监视1024个链接,select 会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的。,不会告诉哪个sock上有数据,如果被select()监视的文件描述符在另一个线程中被关闭,那么结果是未知的。

  4. poll:可以监听无限个,不再修改传入的参数,仍是线程不安全的,意味着,不管服务器有多强悍,你也只能在一个线程里面处理一组I/O流。你当然可以那多进程来配合了,不过然后你就有了多进程的各种问题。,不会告诉哪个sock上有数据

你可能感兴趣的:(爬虫开发)