epoll

With a single file descriptor, Is there any performance difference between select, poll and epoll and …?

本秂侑毒 提交于 2019-12-02 18:23:36
The title really says it all. The and ... means also include pselect and ppoll.. The server project I'm working on basically structured with multiple threads. Each thread handles one or more sessions. All the threads are identical. The protocol takes care of which thread will host the session. I'm using an inhouse socket class that wraps things up. The point of interest is a checkread call which calls either poll (linux) or select (windows). In summary each thread currently calls poll on a single socket. From what I can tell, using epoll would only be of benefit if this thread was looking at

Does epoll(), do its job in O(1)?

﹥>﹥吖頭↗ 提交于 2019-12-02 17:50:57
Wikipedia says unlike the older system calls, which operate at O(n), epoll operates in O(1) [2]). http://en.wikipedia.org/wiki/Epoll However, the source code at fs/eventpoll.c on Linux-2.6.38, seems it is implemented with an RB tree for searching, which has O(logN) /* * Search the file inside the eventpoll tree. The RB tree operations * are protected by the "mtx" mutex, and ep_find() must be called with * "mtx" held. */ static struct epitem *ep_find(struct eventpoll *ep, struct file *file, int fd) { In fact, I couldn't see any man page saying the complexity of epoll() is O(1). Why is it known

Tornado

。_饼干妹妹 提交于 2019-12-02 17:03:23
1.Tornado简介       Tornado是基于epoll的非阻塞式WEB框架,是一个轻量级的Web服务的开源软件      1.1特点        Tornado拥有异步非阻塞IO处理方式,其出色的负载能力,官方用nginx反向代理的方式部署的Tornado比其他框架更能抗压     1.2使用场景       可以用于开发用户量大,高并发,大量HTTP持久链接的WEB网站      1.3性能        Tornado在设计之初就考虑到了性能因素,旨在解决C10K问题,这样的设计使其成为一个拥有非常高性能的解决方案 2.Tornado的机制      Tornado机制:     1.先创建parse_command_line()函数,产生了一个app的对象     2.启动的HttpServer的服务器,把app放进HttpServer中     3.listen监听端口     4.ioloop.IoLoop.currentc创建Socket服务,把socket服务放到epoll里面     5.ioloop.IoLoop.current.start()启动服务,不断的访问epoll     6.前端发送请求     7.epoll监听的端口告诉socket, 8.新建立一个socket     9.然后socket访问(路由映射列表),进行解包,    

Nginx简介

人走茶凉 提交于 2019-12-02 16:45:02
1、Nginx的优点: (1)高并发(处理静态小文件),静态1-2w。 (2)占用资源少,2w并发,开10个线程服务,内存消耗几百M。 (3)功能种类比较多(web,cache,proxy),每一个功能都不是特别强。 (4)支持epoll模型,使得Nginx可以支持高并发。 (5)Nginx配置动态服务和apache的区别。 (6)利用Nginx可以对IP限速,可以限制连接数。 (7)配置更简单,更灵活。 2、Nginx的应用场合 (1)静态服务器(图片,视频服务),html、js、css、flv。并发1-3w--静态并发。    国内只有两款静态服务器,一款是Nginx,另一款是lighttpd(百度贴吧)。 (2)动态服务,nginx+fastcgi的方式运行php(或jsp)。并发500-1500--动态并发。     apache+php,lighttpd+php (3)反向代理,负载均衡。日PV2000w以下,都可以直接用Nginx做代理。 (4)缓存服务 3、Nginx的特点: (1)基于异步IO模型,性能强,能够支持上万并发。 (2)对小文件支持很好,性能很高(限静态小文件) (3)扩展库必须编译进主程序 (4)消耗系统资源比较低 4、小结:   处理静态小文件(小于1M),nginx 和 lighttpd 比 apache 更有优势,lighttpd最强。  

Linux, C, epoll(), read() data incompleted?

夙愿已清 提交于 2019-12-02 15:07:00
问题 Linux, C. Below issue only happens by using epoll(). If I use select() on server socket, there is no data loss. ============================= Update: I received errno =11 (Try again) in read(). Do I need to continue, or break the while loop? ============================= I have client side, send 1280 K data in 10 times (each time, I send 128K data); I have server side, use epoll() to watch incoming data. Once I got notified, I use below code to read data: nbytes = Nread(current_fd, buffer,

2019.10.27 头条面试准备

 ̄綄美尐妖づ 提交于 2019-12-02 13:31:56
2019.10.27 头条面试准备 个人简历 2019.06 - 至今上海华为开发工程师 实习部门:5G开发部 项目:网站开发、运维开发、数据处理 2019.06至今华为实习 Python+Django+Javascript+Nginx+rabbitMQ+ELK 基于 Django 框架使用 Python 开发网站基础进程监控系统,实现进程异常记录、进程异常自动恢复、发送告警邮件,并且用 Web 界面进行展示和管理。整个框架由本人独立设计完成并上线,保证了部门 Web 的稳定。 使用Python对文件里面的数据进行处理分析,并完成web展示。 2019.06 - 至今网站基础进程监控系统开发工程师 1,基于 Django 框架使用 Python 开发网站基础进程监控系统; 2,使用pymysql实现进程异常记录、利用subprocess+ssh连接机器检查进程状态、异常自动恢复、使用rabbitMQ作消息队列发送告警邮件和短信通知; 3,使用JavaScript、Jquery、echarts等开发 Web 界面进行展示和管理进程。4,整个框架由本人独立设计完成并上线,保证了部门 Web 的稳定。 2018.12 - 2019.03华为云意见反馈系统开发工程师 1,基于Spring boot框架+Mybatis+Redis+Restful等技术的一个意见反馈系统。2

epoll(2) 使用及源码分析的引子

别来无恙 提交于 2019-12-02 12:30:11
epoll(2) 使用及源码分析的引子 本文代码取自内核版本 4.17 epoll(2) - I/O 事件通知设施。 epoll 是内核在2.6版本后实现的,是对 select(2)/poll(2) 更高效的改进,同时它自身也是一种文件,不恰当的比方可以看作 eventfd + poll。 多路复用也是一直在改进的,经历的几个阶段 select(2) - 只能关注 1024 个文件描述符,并且范围固定在 0 - 1023,每次函数调用都需要把所有关注的数据复制进内核空间,再对所有的描述符集合进行遍历判断。 poll(2) - 改进 select(2) 前面两个缺点,可以自定义关注的描述符,数量也不受限制(不超过系统的限制),每次调用同样需要复制所有的事件进内核空间,全部遍历。 epoll(2) - 不需要每次调用时所有关注的文件描述符进行内核-用户空间的复制,而是直接将所有的文件描述符和事件常驻内核空间,同时也不需要每次遍历所有文件描述符。 提供的系统调用 #include <sys/epoll.h> typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll

Linux, C, epoll(), read() data incompleted?

回眸只為那壹抹淺笑 提交于 2019-12-02 11:45:12
Linux, C. Below issue only happens by using epoll(). If I use select() on server socket, there is no data loss. ============================= Update: I received errno =11 (Try again) in read(). Do I need to continue, or break the while loop? ============================= I have client side, send 1280 K data in 10 times (each time, I send 128K data); I have server side, use epoll() to watch incoming data. Once I got notified, I use below code to read data: nbytes = Nread(current_fd, buffer, bytes_to_be_read); int Nread(int fd, char *buffer, size_t count) { ssize_t r; size_t left = count; printf

[转帖]Epoll和IOCP的比较

主宰稳场 提交于 2019-12-02 10:20:56
Epoll和IOCP的比较 https://yq.aliyun.com/articles/53621/ kryptosx 2016-05-27 23:32:51 浏览6181 原来整理过一个《 六种Socket I/O模型幽默讲解 》,里面是windows的六种socket I/O模型,大学时的windows网络编程就是讲的这几个。今天听了一个网络技术讲座,突然想起了这两个模型还是没搞清楚。 但是,貌似服务器中用的最多的还是linux,相对于windwos最尖端的IOCP而言,linux祭出的则是它的Epoll。 Epoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。 不同之处: Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows; Epoll 是当事件资源满足时发出可处理通知消息;而 IOCP 则是当事件完成时发出完成通知消息。 从应用程序的角度来看, Epoll 本质上来讲是 同步非阻塞的,而 IOCP 本质上来讲则是异步操作;这是才二者最大的不同。 这么说来,其实Epoll有点像上面说的第四种Socket I/O模型。不过,Epoll只告诉你几个句柄收到消息和收到消息的句柄队列,然后你自己去扫描。 一个例子 有个文档需要拿到打印室打印

[转帖]EPOLL和IOCP比较

那年仲夏 提交于 2019-12-02 10:20:29
EPOLL和IOCP比较 https://blog.csdn.net/educast/article/details/15503179IOCP 异步非阻塞EPOLL 异步阻塞 EPOLL是半成品,IOCP是成品,底层机制一样,协议栈的状态检查不需要用户去查询,由作业系统来通知。 其实这是任何守护性逻辑高性能的基础机制。 但是EPOLL只是告诉你现在可以读和写,即协议栈的读写缓冲被初始化或重设(对于写,上次数据已经提交并写缓冲重设为空,对于读,栈议栈读缓冲已经开始接受数据。) 但是写和读的过程还是由用户来控制,系统只是告诉你已经为你准备好了和网络驱动对接好的读写的通道。如果某个通道的读写很慢,我们其实自己可以控制,比如要读8K字节,但经过x秒只读到几个字节,这说明这个通道很差,我们可以将这个IO通道从EPOLL中分离出来把它投递到一个阻塞的socket中,而不影响整个EPOLL的性能。所以EPOLL虽然是半成品,但用户有更高的控制权。 而对于IOCP,从名称就可以知道,系统不仅控制IO通道的状态,而且把读写操作都做完了才通知用户。对于读,系统已经把数据读好放在buffer中,其实相当于是RBF,对于写,已经是写出了n长度的字节,所以即使某个IO通道上的传输很慢,你也无法控制,因为当你收到通知时,系统已经是读好数据或写出数据。所以IOCP在用户的控制上没有灵活的空间。