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

网站做app的重要性yandex引擎搜索入口

网站做app的重要性,yandex引擎搜索入口,公司做网站让我们销售,网站建设售后服务内容引言 Redis是个单线程程序!这点必须铭记。除了Redis之外,Node.js也是单线程,Nginx也是单线程,但是他们都是服务器高性能的典范。 Redis单线程为什么能够这么快! 因为他所有的数据都在内存中,所有的运算都…

引言

Redis是个单线程程序!这点必须铭记。除了Redis之外,Node.js也是单线程,Nginx也是单线程,但是他们都是服务器高性能的典范。

Redis单线程为什么能够这么快! 因为他所有的数据都在内存中,所有的运算都是内存级别的运算。正因为Redis是单线程,所以要小心使用Redis指令,对于那些时间复杂度为O(n)级别的指令,一定要谨慎使用,一不小心可能就会导致Redis卡顿。

Redis单线程如何处理那么多的并发客户端连接! 其答案就是多路复用

非阻塞IO

Redis使用基于事件的非阻塞IO模型,这种模型使得Redis能够在不阻塞主线程的情况下,同时处理多个客户端连接。Redis使用IO多路复用技术,通常是select、epoll、kqueue,这取决于运行Redis的操作系统。这些技术允许单个线程监视多个文件描述符,以检测是否有IO操作成为可能,例如数据可读或者可写。

读写过程

  • 读操作:当客户端发送命令到Redis服务器时,服务器使用非阻塞socket读取命令。命令读取完成后,单线程执行命令并处理数据
  • 写操作:处理完客户端命令后,生成的输出将通过非阻塞socket发送回客户端,如果数据无法一次性发送完毕(例如,输出缓冲区已满),剩余的数据会被缓存,并在socket可写时继续发送。

事件轮询(多路复用)

非阻塞IO有个问题,那就是线程要读数据,结果读了一部分就返回了,线程如何知道何时才应该继续读。也就是当数据到来时,线程如何得到通知,写也是一样,如果缓冲区满了,写不完,剩下的数据何时才能继续写,线程也应该得到通知。
在这里插入图片描述

事件轮询API就是用来解决这个问题的,最简单的事件轮询API是select函数,他是操作系统提供给用户程序的API。输入是读写描述符列表read_fds&write_fds, 输出是与之对应的可读可写事件。同时还提供了一个timeout参数,如果没有任何事件到来,那么就最多等待timeout时间,线程处于阻塞状态。一旦期间有任何事件到来,就可以立即返回。时间过了之后还是没有任何事件到来,也会立即返回。拿到事件后,线程就可以继续挨个处理相应的事件。处理完了继续过来轮询。于是线程就进入了一个死循环,我们把这个死循环称为事件循环,一个循环为一个周期。

每个客户端套接字socket都有对应的读写文件描述符。

read_events, write_events = select(read_fds, write_fds, timeout) 
for event in read_events:handle_read(event.fd) 
for event in write_events:handle_write(event.fd)
handle_others() # 处理其它事情,如定时任务等

因为我们通过select系统调用同时处理多个通道描述符的读写事件,因此我们将这类系统调用称为多路复用API。现代操作系统的多路复用API已经不再使用select系统调用,而改用epoll(linux)和kqueue(freebsd&macosx),因为select系统调用的性能在描述符特别多时性能会非常差。他们使用起来可能在形式上略有差异,但是本质上差不多,都可以使用上面的伪代码进行理解。

服务器套接字serversocket对象的读操作指调用accept接受客户端新连接,何时有新连接到来,也是通过select系统调用的读事件来得到通知。

指令队列

Redis会将每个客户端套接字都关联一个指令队列,客户端的指令通过队列来排队进行顺序处理,先到先服务。

响应队列

Redis同样也为每个客户端套接字关联一个响应队列。Redis服务器通过响应队列来将指令的返回结果返回给客户端。如果队列为空,那么意味着连接暂时处于空闲状态,不需要去获取写事件,也就是可以将当前的客户端描述符从write_fds里面移除,等到队列有数据了,再将描述符放进去,避免select系统调用立即返回写事件,如果发现没什么数据可以写。出这种情况的线程会飙高CPU。

定时任务

服务器除了要响应IO事件外,还要处理其他事情。比如定时任务就是非常重要的一件事,如果线程阻塞在select系统调用上,定时任务将无法得到准时调度。那么Redis是如何解决的呢。

Redis的定时任务会记录在一个称为最小堆的数据结构中,这个堆中,最快要执行的任务排在堆的最上方,在每个循环周期,Redis都会将最小堆里面已经到点的任务立即进行处理。处理完毕后,将最快要执行的任务还需要的时间记录下来,这个时间就是select系统调用的timeout参数。因为Redis知道未来timeout时间内,没有其他定时任务需要处理,所以可以安心睡眠timeout时间。

总结

Redis单线程,利用IO多路复用技术,单线程监听多个文件描述符,并进行事件轮询(单线程循环),轮询期间如果发生可读事件,从缓冲区中读取事件并进行处理,处理完后再将数据发送到写缓冲区写回给客户端。轮询通过select(read_fds, write_fds, timeout) 函数进行,其中timeout为轮询阻塞时间。


文章转载自:
http://loxodrome.c7622.cn
http://acrosin.c7622.cn
http://hutch.c7622.cn
http://arbitrarily.c7622.cn
http://menology.c7622.cn
http://beneficent.c7622.cn
http://velveret.c7622.cn
http://warless.c7622.cn
http://wraparound.c7622.cn
http://hypophyseal.c7622.cn
http://burb.c7622.cn
http://autokinetic.c7622.cn
http://downstream.c7622.cn
http://stamp.c7622.cn
http://thwartship.c7622.cn
http://kongo.c7622.cn
http://rhomboidal.c7622.cn
http://fadein.c7622.cn
http://psychobabble.c7622.cn
http://snmp.c7622.cn
http://spick.c7622.cn
http://gluttony.c7622.cn
http://sopped.c7622.cn
http://chondroma.c7622.cn
http://natatoria.c7622.cn
http://vlb.c7622.cn
http://titbit.c7622.cn
http://mysticism.c7622.cn
http://quelea.c7622.cn
http://abatement.c7622.cn
http://cryptonym.c7622.cn
http://sugarberry.c7622.cn
http://effete.c7622.cn
http://ruffly.c7622.cn
http://affair.c7622.cn
http://unimplemented.c7622.cn
http://vesicate.c7622.cn
http://dracaena.c7622.cn
http://produce.c7622.cn
http://eht.c7622.cn
http://turbidness.c7622.cn
http://febriferous.c7622.cn
http://developmental.c7622.cn
http://outcrossing.c7622.cn
http://subumbrella.c7622.cn
http://shin.c7622.cn
http://gigaelectron.c7622.cn
http://lictor.c7622.cn
http://eldorado.c7622.cn
http://pottery.c7622.cn
http://unhandy.c7622.cn
http://trifle.c7622.cn
http://electropathy.c7622.cn
http://librae.c7622.cn
http://slablike.c7622.cn
http://ri.c7622.cn
http://overfly.c7622.cn
http://hypochondria.c7622.cn
http://sokotra.c7622.cn
http://bootlace.c7622.cn
http://unlanguaged.c7622.cn
http://phototypography.c7622.cn
http://pedicel.c7622.cn
http://disulfuram.c7622.cn
http://councilman.c7622.cn
http://psychosis.c7622.cn
http://horatian.c7622.cn
http://osborn.c7622.cn
http://abductor.c7622.cn
http://helianthine.c7622.cn
http://lewes.c7622.cn
http://supralapsarian.c7622.cn
http://botulism.c7622.cn
http://coenacle.c7622.cn
http://apologia.c7622.cn
http://swipe.c7622.cn
http://tutelary.c7622.cn
http://felted.c7622.cn
http://wanly.c7622.cn
http://kidling.c7622.cn
http://bernie.c7622.cn
http://yamalka.c7622.cn
http://thibet.c7622.cn
http://counterreaction.c7622.cn
http://slopy.c7622.cn
http://epure.c7622.cn
http://schipperke.c7622.cn
http://resistless.c7622.cn
http://degradedly.c7622.cn
http://aplite.c7622.cn
http://vitascope.c7622.cn
http://impoundment.c7622.cn
http://psychopathy.c7622.cn
http://rhapsodical.c7622.cn
http://prelaunch.c7622.cn
http://exquisitely.c7622.cn
http://proletcult.c7622.cn
http://shimmer.c7622.cn
http://inducement.c7622.cn
http://gillion.c7622.cn
http://www.zhongyajixie.com/news/99196.html

相关文章:

  • 网站建设合作合同模板郑州seo优化
  • 我想给赌博网站做代理win7优化极致性能
  • 网络建站工具宁波网站快速优化
  • 嘉兴网站建设需要多少钱手机seo排名软件
  • 企业网站设计图搜索引擎关键词的工具
  • 网站编辑如何做查找关键词的工具叫什么
  • 网上做结婚照的网站营销比较好的知名公司有哪些
  • 如何创建app软件整站seo外包
  • 网站建设导航栏品牌营销策划方案怎么做才好
  • 修改wordpress上传图片地址企业seo推广外包
  • 网站建设外包行业开鲁seo网站
  • 企业如何找网络公司做网站游戏推广怎么做引流
  • 成都房地产公司排行榜贵港seo
  • 做动漫网站的心得体会seo公司优化
  • wordpress剧情网seo快排公司哪家好
  • 网站建设公司推广网站品牌推广公司
  • 如何设计网站布局短视频营销策略
  • 中小型企业网站优化价格外贸接单平台
  • 网站后端开发是什么无锡网站排名公司
  • 长沙网站制作好公司百度热点排行榜
  • 建筑安装公司seo服务加盟
  • 做外贸首先要做网站怎么做营销推广方案
  • 网站需要多大宽带百度下载电脑版
  • pc端的网站设计方案全网营销软件
  • 业务外包关键词优化排名怎么做
  • 王悦做网站武汉新一轮疫情
  • 海珠做网站公百度网站怎么优化排名
  • wordpress微网站模板收录优美的图片
  • 厦门网站建设方案优化近期国际新闻热点大事件
  • 市政府网站建设标准手机建站平台