poll

select、poll、epoll

不羁的心 提交于 2019-12-01 19:26:21
https://www.cnblogs.com/hsmwlyl/p/10652503.html sleect监听例程 https://www.jianshu.com/p/a293869bbdb8 https://blog.csdn.net/sinat_36184075/article/details/77170996 https://blog.csdn.net/ygl840455828ygl/article/details/52438111 来源: https://www.cnblogs.com/retry/p/11714332.html

ARTS

青春壹個敷衍的年華 提交于 2019-12-01 18:43:51
每周完成一个 ARTS: Algorithm 来源 LeetCode 438. Find All Anagrams in a String。 Review 分享关于 IO 多路复用之 select,poll,epoll 详解。 Tip 分享 50 行 Python 代码实战,教你用微信每天自动给女朋友说晚安。 Share 分享有关于批判性思维的思考。 一 Algorithm 438. Find All Anagrams in a String 链接 难度:[Eazy] 【题意】 Given a string s and a non-empty string p , find all the start indices of p ‘s anagrams in s . Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100. The order of output does not matter. Example 1: 123456789 Input:s: "cbaebabacd" p: "abc"Output:[0, 6]Explanation:The substring with start

高性能编程之IO复用之[select,poll,epoll]比较

喜欢而已 提交于 2019-12-01 17:03:28
综述: 三者的返回值都是就绪的文件描述符的数量 返回0表示没有事件发生。 每次调用select前都需要重置fd集合。 poll会修改pollfd结构体的revents参数,所以不用重置pollfd事件集。 由于每次select和poll调用都返回整个用户注册的事件集合(包括就绪+未就绪) 所以时间复杂度O(N). epoll每次都直接从内核事件表中取得用户注册的事件,无须反复从用户空间读入这些事件。 时间复杂度O(1). poll和epoll_wait分别用nfds和maxevents来指定最多监听多少个文件描述符和事件。 这两个数值都可以达到系统最大值,65535 cat/proc/sys/fs/file-max select和poll只能工作在相对低效的LT模式,而epoll可以工作在ET模式。并且后者还支持EPOLLONESHOT事件。 select和poll采取轮询的工作方式,epoll采用回调方式,适用于连接数量多,但是活动连接比较少的情况。 ~~~~~~~~~~~~~~~~ 来源: oschina 链接: https://my.oschina.net/u/1382024/blog/194934

file_operations poll function

☆樱花仙子☆ 提交于 2019-12-01 15:33:24
值得注意的是,本文中的poll并非system call,而是内核中file_operations的poll函数。 强烈建议先阅读 select usage and implementation in kernel 。 注:代码中的细节可参见 Advanced Char Driver Operations 。 内容源于: select()/poll() 的内核实现 For every file descriptor, it calls that fd’s poll() method, which will add the caller to that fd’s wait queue, and return which events (readable, writeable, exception) currently apply to that fd. 1. How to add poll function to the kernel module code? Include needed headers: 12 #include <linux/poll.h> Declare waitqueue variable: 1 static (fortune_wait); Add fortune_poll() function and add it (as .poll callback)

看完让你彻底搞懂Websocket原理

☆樱花仙子☆ 提交于 2019-12-01 08:23:28
看完让你彻底搞懂Websocket原理 偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,最后再赞一个~ 一、websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解 有交集,但是并不是全部。 另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。= 再简单来说,层级不一样。 二、Websocket是什么样的协议,具体有什么优点 首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。

Linux网络编程三、 IO操作

人盡茶涼 提交于 2019-12-01 07:13:32
  当从一个文件描述符进行读写操作时,accept、read、write这些函数会阻塞I/O。在这种会阻塞I/O的操作好处是不会占用cpu宝贵的时间片,但是如果需要对多个描述符操作时,阻塞会使同一时刻只能处理一个操作,从而使程序的执行效率大大降低。一种解决办法是使用多线程或多进程操作,但是这浪费大量的资源。另一种解决办法是采用非阻塞、忙轮询,这种办法提高了程序的执行效率,缺点是需要占用更多的cpu和系统资源。所以,最终的解决办法是采用IO多路转接技术。   IO多路转接是先构造一个关于文件描述符的列表,将要监听的描述符添加到这个列表中。然后调用一个阻塞函数用来监听这个表中的文件描述符,直到这个表中有描述符要进行IO操作时,这个函数返回给进程有哪些描述符要进行操作。从而使一个进程能完成对多个描述符的操作。而函数对描述符的检测操作都是由系统内核完成的。   linux下常用的IO转接技术有:select、poll和epoll。 select:   头文件:#include <sys/select.h>、#include <sys/time.h>、#include <sys/types.h>、#include <unistd.h>   函数:     int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set

4-7 selectors模块

时间秒杀一切 提交于 2019-12-01 06:49:53
一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思,这样理解还是有些抽象, 为此,咱们来理解下复用在通信领域的使用,在通信领域中为了充分利用网络连接的物理介质, 往往在同一条网络链路上采用时分复用或频分复用的技术使其在同一链路上传输多路信号,到这里我们就基本上理解了复用的含义, 即公用某个“介质”来尽可能多的做同一类(性质)的事,那IO复用的“介质”是什么呢?为此我们首先来看看服务器编程的模型, 客户端发来的请求服务端会产生一个进程来对其进行服务,每当来一个客户请求就产生一个进程来服务,然而进程不可能无限制的产生, 因此为了解决大量客户端访问的问题,引入了IO复用技术,即:一个进程可以同时对多个客户请求进行服务。 也就是说IO复用的“介质”是进程(准确的说复用的是select和poll,因为进程也是靠调用select和poll来实现的), 复用一个进程(select和poll)来对多个IO进行服务,虽然客户端发来的IO是并发的但是IO所需的读写数据多数情况下是没有准备好的, 因此就可以利用一个函数(select和poll)来监听IO所需的这些数据的状态,一旦IO有数据可以进行读写了,进程就来对这样的IO进行服务。 理解完IO复用后,我们在来看下实现IO复用中的三个API(select、poll和epoll

nodejs事件循环

孤人 提交于 2019-12-01 00:54:07
这两天系统地学习了一下nodejs中的时间循环机制。这篇Post将把其基本内容以及我当时遇到的问题都记录下来。 Note :为避免理解冲突,将在官方文档的例子上进行理解。 基础knowledge nodejs的event loop是javascript实现非阻塞IO的手段。 node的整体结构 借用一张图: nodejs由c/c++库(主要为libuv依赖、v8实现部分和其它)和js实现的核心库。 node的事件循环 既然本篇主要讨论事件循环,基本理解一下node中事件循环与js代码的对应关系: 这里只补充一下pending IO callback 这一phase。这个阶段主要处理一些IO操作的回调,比如读文件的回调,网络请求完成的回调等(排除任何close回调)。 每个phase有一个类似FIFO的堆栈。当运行到这个phase时,如果有回调的话,会从这个回调堆栈中取出所有回调来执行,或者是到达了该phase的最大执行数限制,接着进入下一phase。 nodejs代码运行流程 从main.js开始运行主程序代码,接着判断是否event loop结束(如果事件循环一轮都没有任何回调了,说明可以终止进程了)。有的话,会从timer phase开始进行event loop。 nodejs event loop基础 上图是nodejs官网的图。表明event loop由以上phase组成:

nodejs事件循环

不打扰是莪最后的温柔 提交于 2019-12-01 00:07:43
这两天系统地学习了一下nodejs中的时间循环机制。这篇Post将把其基本内容以及我当时遇到的问题都记录下来。 Note :为避免理解冲突,将在官方文档的例子上进行理解。 基础knowledge nodejs的event loop是javascript实现非阻塞IO的手段。 node的整体结构 借用一张图: nodejs由c/c++库(主要为libuv依赖、v8实现部分和其它)和js实现的核心库。 node的事件循环 既然本篇主要讨论事件循环,基本理解一下node中事件循环与js代码的对应关系: 这里只补充一下pending IO callback 这一phase。这个阶段主要处理一些IO操作的回调,比如读文件的回调,网络请求完成的回调等(排除任何close回调)。 每个phase有一个类似FIFO的堆栈。当运行到这个phase时,如果有回调的话,会从这个回调堆栈中取出所有回调来执行,或者是到达了该phase的最大执行数限制,接着进入下一phase。 nodejs代码运行流程 从main.js开始运行主程序代码,接着判断是否event loop结束(如果事件循环一轮都没有任何回调了,说明可以终止进程了)。有的话,会从timer phase开始进行event loop。 nodejs event loop基础 上图是nodejs官网的图。表明event loop由以上phase组成:

nodejs事件循环

為{幸葍}努か 提交于 2019-12-01 00:05:12
这两天系统地学习了一下nodejs中的时间循环机制。这篇Post将把其基本内容以及我当时遇到的问题都记录下来。 Note :为避免理解冲突,将在官方文档的例子上进行理解。 基础knowledge nodejs的event loop是javascript实现非阻塞IO的手段。 node的整体结构 借用一张图: nodejs由c/c++库(主要为libuv依赖、v8实现部分和其它)和js实现的核心库。 node的事件循环 既然本篇主要讨论事件循环,基本理解一下node中事件循环与js代码的对应关系: 这里只补充一下pending IO callback 这一phase。这个阶段主要处理一些IO操作的回调,比如读文件的回调,网络请求完成的回调等(排除任何close回调)。 每个phase有一个类似FIFO的堆栈。当运行到这个phase时,如果有回调的话,会从这个回调堆栈中取出所有回调来执行,或者是到达了该phase的最大执行数限制,接着进入下一phase。 nodejs代码运行流程 从main.js开始运行主程序代码,接着判断是否event loop结束(如果事件循环一轮都没有任何回调了,说明可以终止进程了)。有的话,会从timer phase开始进行event loop。 nodejs event loop基础 上图是nodejs官网的图。表明event loop由以上phase组成: