当前位置: 首页 > news >正文

静态网站是什么原因百度联盟广告收益

静态网站是什么原因,百度联盟广告收益,网站建设需要到哪些知识,河北省邢台市seo文章目录Redis为什么用单线程#xff1f;多线程的开销Redis使用单线程为什么还这么快#xff1f;网络与IO操作的潜在阻塞点基于多路复用的高性能IO模型回调机制Redis的性能瓶颈点其他Redis相关的有趣问题1. 为什么要用Redis#xff0c;直接访问内存不好吗#xff1f;2. 数据… 文章目录Redis为什么用单线程多线程的开销Redis使用单线程为什么还这么快网络与IO操作的潜在阻塞点基于多路复用的高性能IO模型回调机制Redis的性能瓶颈点其他Redis相关的有趣问题1. 为什么要用Redis直接访问内存不好吗2. 数据太多内存放不下怎么办比如我要缓存100G的数据怎么办Redis想必大家都或多或少听过吧我们在工作学习中通常用它来作为缓存使用既然是作为缓存大家的第一反应肯定是这家伙很快 实际上它确实也很快 : )但Redis底层却是单线程的有同学可能就要有疑问了为什么单线程的Redis却能够快到飞起 别急我尽量用通俗易懂的语言来给各位说道说道~~ Redis是单线程主要是指Redis的网络IO和读写是由一个线程来完成的但Redis的其他功能比如持久化、异步删除、集群数据同步等其实是由额外的线程执行的。这不是本文讨论的重点有个印象即可 Redis为什么用单线程 多线程的开销 通常情况下在采用多线程后如果没有良好的系统设计其实是左图所展示的那样注意纵坐标。刚开始增加线程数时系统吞吐率会增加再进一步增加线程时系统吞吐率就增长迟缓了甚至还会出现下降的情况。 关键瓶颈在于 系统中通常会存在会被多线程同时访问的共享资源为了保证共享资源的正确性就需要有额外的机制保证线程安全性例如加锁这会带来额外的开销。 比如拿最常用的List类型来举例吧假设Redis采用多线程设计有两个线程A和B分别对List做LPUSH和LPUSH操作为了使得每次执行都是相同的结果即【B线程取出A线程放入的数据】就需要让这两个过程串行执行。这就是多线程编程模式面临的共享资源的并发访问控制问题。 并发访问控制一直是多线程开发中的一个难点问题如果只是简单地采用一个互斥锁就会出现即使增加了线程大部分线程也在等待获取互斥锁并行变串行系统吞吐率并没有随着线程的增加而增加。 同时加入并发访问控制后也会降低系统代码的可读性和可维护性所以Redis干脆直接采用了单线程模式。 Redis使用单线程为什么还这么快 之所以使用单线程是Redis设计者多方面衡量的结果。 Redis的大部分操作在内存上完成采用了高效的数据结构例如哈希表和跳表采用了多路复用机制使其在网络IO操作中能并发处理大量的客户端请求实现高吞吐率 既然Redis使用单线程进行IO如果线程被阻塞了就无法进行多路复用了所以不难想象Redis肯定还针对网络和IO操作的潜在阻塞点进行了设计。 网络与IO操作的潜在阻塞点 在网络通信里服务器为了处理一个Get请求需要监听客户端请求bind/listen和客户端建立连接accept从socket中读取请求recv解析客户端发送请求parse最后给客户端返回结果send。 最基本的一种单线程实现是依次执行上面的操作。 上面标红的accept和recv操作都是潜在的阻塞点 当Redis监听到有连接请求但却一直不能成功建立起连接时就会阻塞在accept()函数这里其他客户端此时也无法和Redis建立连接当Redis通过recv()从一个客户端读取数据时如果数据一直没有到达也会一直阻塞 基于多路复用的高性能IO模型 为了解决IO中的阻塞问题Redis采用了Linux的IO多路复用机制该机制允许内核中同时存在多个监听套接字和已连接套接字select/epoll。 内核会一直监听这些套接字上的连接或数据请求。一旦有请求到达就会交给Redis处理这就实现了一个Redis线程处理多个IO流的效果。 此时Redis线程就不会阻塞在某一个特定的客户端请求处理上所以它可以同时和多个客户端连接并处理请求。 回调机制 select/epoll一旦监测到FD上有请求到达时就会触发相应的事件被放进一个队列里Redis线程对该事件队列不断进行处理所以就实现了基于事件的回调。 例如Redis会对Accept和Read事件注册accept和get回调函数。当Linux内核监听到有连接请求或读数据请求时就会触发Accept事件和Read事件此时内核就会回调Redis相应的accept和get函数进行处理。 Redis的性能瓶颈点 经过上面的分析虽然通过多路复用机制可以同时监听多个客户端的请求但Redis仍然有一些性能瓶颈点这也是我们平时编程需要极力避免的情况。 1. 耗时操作 任意一个请求在Redis中一旦耗时较久都会影响整个server的性能。后面的请求都要等前面这个耗时请求处理完成自己才能被处理到。 这一点需要我们在设计业务场景时去规避Redis的lazy-free机制也把释放内存的耗时操作放在了异步线程中去执行了。 2. 高并发场景 并发量非常大时单线程读写客户端IO数据存在性能瓶颈虽然采用IO多路复用机制但还是只能单线程依次读取客户端的数据无法利用到CPU多核。 Redis在6.0可以利用CPU多核多线程读写客户端数据但只是针对客户端的读写是并行的每个命令的真正操作还是单线程。 其他Redis相关的有趣问题 借此机会也提几个和redis相关的有意思的问题。 1. 为什么要用Redis直接访问内存不好吗 这一条其实并没有很明确的界定对于一些不经常变动的数据可以直接放到内存里不一定要放到Redis里可以放到内存里。一致性问题如果一个数据被修改了数据在本地内存里的话可能只有一台服务器上的数据被修改了。如果用Redis里面的话我们访问Redis服务器可以解决一致性问题。 2. 数据太多内存放不下怎么办比如我要缓存100G的数据怎么办
http://www.pierceye.com/news/243598/

相关文章:

  • 免费网页制作网站建设2015年做啥网站致富
  • 个人网站制作基本步骤江阴网站的建设
  • 英文网站名需要斜体吗宁波seo外包费用
  • 网站设计价格公司门户网站建设
  • wordpress如何修改文章路径哈尔滨个人优化排名
  • 拓者设计吧网站科技基金
  • 有专门下载地图做方案的网站吗家装公司报价
  • 阿里域名注册网站阿里云建站保证销售额
  • 三北防护林体系建设网站培训班学员培训心得
  • 西安百度网站排名优化友情链接代码模板
  • 网站建设怎么做网站济南做网站推广有哪些公司
  • 恩阳建设局网站南阳网站建设赛科
  • 服务器IP做网址打开网站传媒公司宣传
  • 安装Wordpress个人网站医院网站建设公司价格低
  • 万能网页编辑器南通百度seo代理
  • 关于酒店网站建设的摘要手机百度2020
  • 楚雄网站建设rewlkj自己怎么建立个人网站
  • 网站开发工程师工作描述加强门户网站建设与管理办法
  • 电商网站优化方案个人网站设计与制作代码
  • 仙居建设规划局网站asp 茶叶网站模板
  • 福州网页模板建站梦幻西如何建立网站做代练
  • 专业做毕业设计网站设计禹州市城乡建设局网站
  • 魔站网站开发手机商城官网
  • 沧州 网站建设公众号搭建第三方平台
  • 天津建设项目招投标网站唐山网站建设推广
  • 长沙h5建站手机图片网站源码
  • php网站项目无锡有网页制作公司吗
  • 做企业网站需要收费吗wordpress单主题
  • 潮州网站开发多少钱wordpress用户调用
  • 湖南响应式网站公司闸北建设机械网站