epoll

阻塞和非阻塞,同步和异步 总结【转】

倖福魔咒の 提交于 2021-01-08 20:11:14
转自: https://www.cnblogs.com/George1994/p/6702084.html 阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且 站在那里 , 不管水开没开,每隔一定时间看看水开了没 。- 同步阻塞 老王想了想,这种方法不够聪明。 2.老王还是用水壶煮水,不再傻傻的站在那里看水开, 跑去寝室上网 , 但是还是会每隔一段时间过来看看水开了没有,水没有开就走人 。- 同步非阻塞 老王想了想,现在的方法聪明了些,但是还是不够好。 3.老王这次使用高大上的响水壶来煮水, 站在那里 , 但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他 。- 异步阻塞 老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。 4.老王还是使用响水壶煮水, 跑到客厅上网去 ,等着响水壶 自己把水煮熟了以后通知他 。- 异步非阻塞 老王豁然,这下感觉轻松了很多。 同步和异步 同步就是烧开水,需要自己去轮询(每隔一段时间去看看水开了没),异步就是水开了,然后水壶会通知你水已经开了,你可以回来处理这些开水了。 同步和异步是相对于操作结果来说,会不会等待结果返回。 阻塞和非阻塞 阻塞就是说在煮水的过程中

Nginx详解(正向代理、反向代理、负载均衡原理)

故事扮演 提交于 2021-01-06 05:40:15
Nginx配置详解 nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面简单介绍nginx 反向代理 负载均衡 nginx特点 1. 反向代理 关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道; 此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户 正向代理 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理 在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

Java 非阻塞 IO 和异步 IO

廉价感情. 提交于 2021-01-06 04:26:09
原文出处: JavaDoop 上一篇文章介绍了 Java NIO 中 Buffer、Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单。 本文将介绍非阻塞 IO 和异步 IO,也就是大家耳熟能详的 NIO 和 AIO。很多初学者可能分不清楚异步和非阻塞的区别,只是在各种场合能听到异步非阻塞这个词。 本文会先介绍并演示阻塞模式,然后引入非阻塞模式来对阻塞模式进行优化,最后再介绍 JDK7 引入的异步 IO,由于网上关于异步 IO 的介绍相对较少,所以这部分内容我会介绍得具体一些。 希望看完本文,读者可以对非阻塞 IO 和异步 IO 的迷雾看得更清晰些,或者为初学者解开一丝丝疑惑也是好的。 NIO,JDK1.4,New IO,Non-Blocking IO NIO.2,JDK7,More New IO,Asynchronous IO,严格地说 NIO.2 不仅仅引入了 AIO 阻塞模式 IO 我们已经介绍过使用 Java NIO 包组成一个简单的客户端-服务端网络通讯所需要的 ServerSocketChannel、SocketChannel 和 Buffer,我们这里整合一下它们,给出一个完整的可运行的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Server {

从Nginx、Apache工作原理看为什么Nginx比Apache高效!

谁说我不能喝 提交于 2021-01-05 13:38:08
Nginx才短短几年,就拿下了Web服务器大壁江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于Httpd,甚至能轻松解决C10K问题。 在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx + PHP(FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。 一般来说,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。 而这台 Nginx + PHP(FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存( 15M*10=150M ),开启的64个php-cgi进程消耗1280M内存( 20M*64=1280M ),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。 在3万并发连接下,访问Nginx+ PHP(FastCGI) 服务器的PHP程序

从Nginx、Apache工作原理看为什么Nginx比Apache高效!

梦想与她 提交于 2021-01-05 12:00:47
Nginx才短短几年,就拿下了Web服务器大壁江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于Httpd,甚至能轻松解决C10K问题。 在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx + PHP(FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。 一般来说,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。 而这台 Nginx + PHP(FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存( 15M*10=150M ),开启的64个php-cgi进程消耗1280M内存( 20M*64=1280M ),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。 在3万并发连接下,访问Nginx+ PHP(FastCGI) 服务器的PHP程序

Redis 的处理模型AE 模块

↘锁芯ラ 提交于 2021-01-03 15:17:11
事件类型 – 时间类型(serverCron) – 文件类型(客户端请求,复制等) – 两个类型不会并发,串行执行 • 好处: – 不需要考虑各个操作并发的情况 • 坏处: – 效率会有影响(时间事件如serverCron可能会被 阻塞一段较长的时间) 事件的实现 • 将文件事件和时间事件注册到eventLoop中, eventloop在系统main方法中开始循环 • 从epoll/kqueue/select中选择一种多路复用方 法 • 先处理文件事件再处理时间事件 (aeProcessEvent) – 遍历时间事件链表中找到即将触发的时间 – 以这个时间和当前时间差为超时时间去pull文件事 件,置入一个数组中,并根据读写不同的属性调用 对应的回调函数 –遍历时间事件链表,处理到期的时间事件 来源: oschina 链接: https://my.oschina.net/newchaos/blog/4874391

Python面试题整理

吃可爱长大的小学妹 提交于 2021-01-03 08:31:24
1. 什么情况下使用Python语言开发比较好?/你对Python怎么看?/。。。    回答思路:   时间线:   1991年,第一个稳定的Python版本;   2000年,Python2.7稳定版本发布;   2008年,Python3发布;   2020年,Python2不再维护;   空间线:   Python设计哲学;   Python2、3特性;   和其他编程语言(如c++)对比;   语言选型考虑因素;   思路串联:设计哲学(Python本质特性)-> 如何选型(正面回答,取其精华) -> 埋下一个问题引子   示例答案:Python自1991年Rossum编写发布出第一个版本以来,便一直遵循着其设计哲学”简单、明确、优雅“,设计哲学的根本出发点就决定了Python这门语言的编程开发的易用性和工作高效性,同样的业务需求实现,可能传统编程语言C++程序猿需要1周工期,而Python程序猿很有可能三天不到就能完成,而且潜在隐藏的问题会少很多,因为Python本身目前有非常庞大的开源第三方库,同时封装了很多复杂的语言底层操作如内存分配与释放,指针的相关操作等;   在具体的项目实践过程中,开发语言的选型需要考虑到几个方面:项目业务本身的特点适合哪种语言、公司历史的技术栈和人员技术储备倾向于哪种语言、选型的语言当前领域内的生态体系和发展前景(比如是否不在维护)

红黑树(第一篇)

守給你的承諾、 提交于 2020-12-28 01:14:50
介绍 R-B Tree全称Red-Black Tree,又名红黑树 1972年由鲁道夫.贝尔发明 一种自平衡二叉查找树 二叉查找树每个节点增加一个存储位表示节点的颜色,非黑即红 时间复杂度O(log n) 二叉查找树? 平衡二叉查找树? 二叉查找树 Binary Search Tree 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值 任意节点的左、右子树也分别为二叉查找树 没有键值相等的节点 时间复杂度O(log n)(最好的情况下) 例子 二叉查找树 退化成线性的二叉查找树,时间复杂度O(n) 平衡二叉查找树 AVL 任何一个节点的左子树与右子树都是平衡二叉查找树,且高度之差的绝对值不超过1(即平衡因子:左子树高度-右子树高度,1 or 0 or -1) 严格的平衡二叉查找树 对于查找友好,对于插入、删除不够友好,频繁破坏规则,频繁旋转以适应规则 例子 RB特性 每个节点或者黑色,或者红色 根节点是黑色 每个叶子节点(NIL)是黑色(注:此处叶子节点,指为空(NIL或NULL)的叶子节点) 如果一个节点是红色的,则它的子节点必需是黑色的 对任意节点,其到叶子节点(NIL)的每条路径都包含相同数目的黑色节点 例子 时间复杂度 定理:一棵含有n个节点的红黑树的高度至多为2log(n+1) 逆否命题

闪电侠 Netty 小册里的骚操作

本秂侑毒 提交于 2020-12-26 01:14:10
前言 即使这是一本小册,但基于“不提笔不读书”的理念,仍然有必要总结一下。此小册对于那些“硬杠 Netty 源码 却不曾在千万级生产环境上使用实操”的用户非常有用。当然,对那些没有 Netty 编程经验的人来说,更为有用。 放个小册地址:[ Netty 入门与实战:仿写微信 IM 即时通讯系统 ]( https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b4db06d5188251afc257383#heading-2 ) 再次强烈推荐,一碗黄焖鸡/半杯 Luckin coffee/一包炫赫门 的价钱,可以让你学会使用 Java 界的 epoll 进行多路复用网络编程,不能说是不划算的 :) 本文标题含有“骚操作”,为什么这么说呢? 作者是某团某评基础架构部技术专家,长期负责后台千万级别的推送系统,而这些推送系统自然是长连接实现的。可以想象,作者的这些实践经验不可谓不好用,纵然看过源码,提过 issue,本人也觉得这些操作非常好用,非常骚气。 开始 我们挑重点讲,虽然对于强迫症来讲,每一节都有笔记才是最吼的! 1 服务端启动流程 1. 通过给 bind 方法添加监听器,用以自动绑定递增端口。算骚操作吧? 2. attr 方法,为每条连接增加属性,能够实现全单例模式哟 3. childOption 方法,关于

nginx详解

风流意气都作罢 提交于 2020-12-25 12:02:30
一,服务介绍 是一个开源,支持高性能,高并发的www服务和代理服务软件,占用资源少,且功能丰富而逐渐流行起来, web软件(apache.lls) 反向代理负载均衡功能 (与lvs和haproxy专业代理软件) 缓存服务功能(squid,varnish) 二,服务功能以及特性 nginx重要特性 可针对静态资源做高并发访问及缓存 可使用方向代理,并且可进行数据缓存 具有简单负载均衡,节点健康检查和容错功能 支持远程fastCGI服务的缓存加速 支持fastCGI,Uwsgi,SCGI and memcached servers的加速和缓存 支持ssl tls sni 具有模块化的架构,过滤器包含gzip ranges 支持 chunked响应,xslt ssl及图像缩放等功能,在ssl过滤器中,一个包含多个ssl的页面,如果经过fastCGI或反向代理处理,可被并行处理 他所具备的其他www服务特性如下: 支持基于名字,端口以及IP的多虚拟主机站点 支持keepalived 和pipelined 可进行简单,方便,领过的配置和管理 支持修改nginx配置,并且在代码上显示,可平滑重启,不中断业务访问 可自定义访问日志格式,临时缓冲写日志操作,快速日志沦陷及通过rsyslog处理日志 可利用信号控制nginx进程 支持3xx-5xx状态吗重定向 支持rewrite模块