epoll

Could you recommend some guides about Epoll on Linux [closed]

南笙酒味 提交于 2019-11-26 12:09:13
问题 I need to know about Epoll On linux System. Could you recommend manual or guides about epoll library? need more detailed guides. it\'s better to have some examples. help me. and Thank you for reading. 回答1: Here's an introduction to Epoll, a pretty basic tutorial: http://blog.kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/ A more complete example can be found here: https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/ Also, the man pages: http://man-wiki.net/index

epoll 基本知识与使用

走远了吗. 提交于 2019-11-26 09:59:37
https://blog.csdn.net/qq_35721743/article/details/86742508 epoll 最大的好处在于它不会随着监听 fd 数目的增长而降低效率。 epoll 的接口,一共有三个函数, 都在头文件 #include <sys/epoll.h> 里。 1. 创建 epoll 句柄 int epfd = epoll_create(intsize); 创建一个 epoll 句柄,size 用来告诉内核这个监听的数目一共有多大。当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看 /proc/进程id/fd/, 是能够看到这个fd的,所以在使用完epoll后,必须调用 close() 关闭。 否则可能导致 fd 被耗尽。 函数声明: int epoll_create(int size) 该函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的socket fd 上是否发生以及发生了什么事件。size就是你在这个epoll fd上能关注的最大socket fd 数, 由用户确定, 只要内存空间够用。 2. 将被监听的描述符添加到epoll句柄或从epoll句柄中删除或者对监听事件进行修改 函数声明:int epoll_ctl( int epfd, int op, int fd, struct

进程/线程/协成

假如想象 提交于 2019-11-26 05:25:19
进程:进程就是应用程序的启动实例,比如说打开一个软件,打开一个应用,就等于开启一个进程。进程拥有代码和打开的文件资源,数据资源,独立的内存空间。 线程:从属于进程,是程序的执行者,一个进程至少包括一个主线程。当然也可以包含更多的子线程。线程有自己的栈空间。 协程:一种比线程更加轻量级的存在,正如一个进程下有多个线程一样,一个线程下可以拥有多个协程。协程是认为开启的,不受操作系统的管理和调度。这也就是说协程不会像线程那样切换上下文环境,消耗资源。 归纳: 对于操作系统来讲,线程是最小的执行单位,进程是最小的资源管理单位,协程是人为控制,不受操作系统的管理和调度。 多进程之间的通信 定义生产者/消费者模型 生产者写入数据到队列中,当队列容量已满的时候(限定队列长度),生产者属于阻塞状态。 消费者监听同步队列,当队列中有数据时需要拉取数据,否则就属于阻塞状态。 多线程之间的通信 为什么需要线程通信? 在多线程并发操作时,cpu默认是是随机切换线程的,如果我们使用多线程来共同完成一件任务时,我们希望他们有规律的执行,而不至于多个线程对于同一共享数据的读写操作。所以多线程之间时需要一个协调机制的。 怎么解决多线程通信问题 ​ 对于多线程避免多个线程对于同一共享数据的操作,我们引出锁的概念。python已经给我们提供了Threading.Lock() 对象,添加锁[lock.acquire()

Nginx :Nginx入门(简介)

半城伤御伤魂 提交于 2019-11-26 05:22:38
一、什么是 Nginx Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP(Nginx从1.9.0也可以做TCP的路由)和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到 Apache 的近 2/3。对 proxy 和 rewrite 模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts ,适合用来做 mongrel clusters 的前端 HTTP 响应。 目前Nginx在国内很多大型企业都有应用,且普及率呈逐年上升趋势。 选择Nginx的理由 : 第一,它可以支持5W左右的高并发连接; 第二,内存消耗少; 第三,成本低。 二、Nginx在架构中发挥的作用 ① 网关:面向客户的总入口 ② 虚拟主机:一台机器为不同的域名/ip/端口提供服务 ③ 路由:使用反向代理,整合后续服务为一个完整业务 ④ 静态资源服务器:mvvm模式中,用来发布前端html/css/js/img,也可以作为图片服务器使用 ⑤ 负载集群:使用upstream,负载多个服务

Redis为什么是单线程、及高并发快的3大原因详解

旧城冷巷雨未停 提交于 2019-11-25 20:44:15
Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快; 2.redis是单线程的,省去了很多上下文切换线程的时间; 3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。 为什么Redis是单线程的 1.官方答案 因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。 2.性能指标 关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求。 3.详细原因 1)不需要各种锁的性能消耗 Redis的数据结构并不全是简单的Key-Value,还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除 一个对象。这些操作可能就需要加非常多的锁,导致的结果是同步开销大大增加。 总之,在单线程的情况下,就不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。 2)单线程多进程集群方案 单线程的威力实际上非常强大,每核心效率也非常高