游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

什么是selectpollepoll?同步异步阻塞非阻塞有啥

  先解开第一个疑惑:有哪五种IO模型BlockingIO【阻塞IO】NonBlockingIO【非阻塞IO】MultiplexingIO【IO多路复用】AsynchronousIO【异步IO】SignalDrivenIO【信号驱动IO】这些IO模型具体是怎么工作的,往下看。先来一波前提的讲解整个计算机系统涉及到了硬件基础跟操作系统这两部分,而我们开发的软件则是运行在系统之上的。先来看下现代计算机系统的硬件组成部分:总线、IO设备、主存、处理器
  总线是一组电子管道,这个管道贯穿了整个计算机系统,主要的工作就是携带信息字节在各个部件之间传递。IO设备就是系统与外部世界的连接通道。例如鼠标键盘显示器等等。主存则是一个临时的存储设备,用来存放程序以及程序要处理的数据。处理器就是中央处理单元【CPU】就是用来解释存储在主存中的指令的引擎。讲的明白点,就是把要计算的数据以及计算过程丢给处理器,然后让它计算得到我们想要的结果。操作系统就是我们熟知的windowslinuxunix操作系统。操作系统是位于硬件跟应用程序之间的一层软件,该软件(操作系统)提供了两个基本的功能:一个是防止硬件被失控的应用程序滥用;一个就是向应用程序提供了一种简单一致的机制来控制不同的硬件设备。而怎么实现这两种功能的呢,是通过三个基本的抽象概念来是实现的,分别是:进程、虚拟内存以及文件。而这个进程,就是我们今天要讲的主角,至于虚拟内存跟文件在这里就先不讲了。对于进程使用的学习,是作为程序员的必须课之一。内核空间跟用户空间上面已经提到了,在硬件之上,有一层操作系统,更上层的是应用程序。操作系统可以直接控制硬件,可以访问到受保护的内存空间。而应用程序的进程则不可以直接操作硬件。为了保护操作系统的内核运行,操作系统将虚拟空间划分为两部分:内核空间、用户空间。至于这两个概念的详细介绍这里就先不写了。在这里只需要知道进程是运行在一个叫虚拟内存空间上的,这个虚拟内存空间有一部分是内核使用的,叫内核空间,有一部分是进程使用的,叫用户空间。而进程需要操作硬件,只能通过调用操作系统提供的内核函数来实现,例如linux中的read操作和write操作。开始进入主题什么是进程?前面的讲解我们已经知道了,操作系统是位于硬件跟应用程序程序之间的一层软件。而我们开发的各种应用软件,比如Photoshop微信QQ等等,都是运行在这个操作系统上面的。那么我们的各种应用软件是怎么来使用硬件的以及怎么保证各个应用软件之间的数据不会错乱呢?进程登场了进程就是操作系统提供的一种抽象概念,这个概念给各种应用软件提供了一种假象,让不同的应用软件看上去好像是单独的占用硬件资源,让硬件单独的处理我这个正在运行的软件。也就是说一个进程代表着一个软件正在执行的过程。但是我们的电脑上,肯定不止开了一个软件,肯定一次性开了好几个,那么操作系统就会建立起很多个不同的进程来处理不同的软件。但是CPU一次只能处理一种程序,当有不同的程序需要同一个CPU处理怎么办?就是我们这篇文章的重点登场了:五种IO模型来实现并发的处理不同的程序上面那么讲解进程的概念,一开始新手肯定理解起来很吃力。举个例子来说明吧:我们小时候肯定玩过积木,而刚购买过来的积木里面有一些已经画好的图形教程,教我们怎么搭建出不同的造型,我们照着这个图形来搭建积木,搭建出一个造型在上面的例子中,我们人就是处理器,也就是CPU;而那些图形教程就是程序,也可以说是算法;剩下的那些各种各样的积木就是要输入的数据。那么进程就是我们人学习了图形教程,然后使用了各种各样的积木,搭建出不同造型的整个过程的总和下面讲解五种IO模型1。BlockingIO【阻塞IO】
  BlockingIO也叫BIO,也就是阻塞IO。从图中可以看出当进程了调用了recvfrom的系统调用,kernel就开始了进行IO操作了,这个操作就是准备数据。而这个准备数据是需要一个过程的,内核需要获取数据,需要等待数据被拷贝到内核空间,然后再将数据从内核空间拷贝到用户空间。这其中涉及到两个过程,一个就是操作系统内核需要等待数据被拷贝到内核空间,另一个过程就是将数据从内核空间拷贝到用户空间。在这个阻塞IO模型中,在数据还没到达用户空间之前,这两个过程都是阻塞的,一直处于Blocking的状态。这就是阻塞IO,也叫BIO
  用生活的例子来理解阻塞IO:一个客户就是一种软件,奶茶店就是操作系统,制作奶茶的机器就是CPU
  客户到奶茶店,客户跟奶茶店的店员说要买奶茶【进行了系统调用】,客户啥事也不干就瞎等着【阻塞状态】,而店员接到这个客户要求后,就开始使用机器制作奶茶【内核准备数据】,等到制作好了之后【内核准备好了数据】,再把奶茶放到前台【将数据从内核空间拷贝到用户空间】,并且通知客户自己过来取奶茶,客户拿了之后走人【进行read操作】客户到奶茶店说要买奶茶、机器制作奶茶、店员把奶茶拿到前台、客户取走的整个过程就是一个进程2。NonBlockingIO【非阻塞IO】
  NonBlockingIO也叫NIO,也就是非阻塞IO。同样从图中可以看出当进程调用了recvfrom的系统调用,kernel一样就开始了IO操作。但是同BIO不同的是,BOI会把内核准备数据的过程给挂起【阻塞】,直到内核准备好了数据才返回。而NIO则是直接先返回一个error告知进程数据还没准备好。同样的在进程端,也不用一直傻傻的等待,当得到一个数据还没准备好的错误时,会再次发送系统调用,直到内核准备好了数据,再从内核空间将数据拷贝到用户空间。NIO最大的特点就是,进程需要不断的询问kernel数据准备好了没。在我看来这是非常傻的操作,可能我理解的不够透彻~~
  举例:客户到奶茶店,客户跟店员说要买奶茶【进行系统调用】,这时候店员直接跟客户说稍等一下还没做好【直接返回error】,然后一边开始使用机器制作奶茶【内核准备数据】。而客户这边的做法则是重复的询问店员奶茶是否做好了,直到店员把奶茶做好为止。同样的,这期间客户除了一直询问之外,啥事也没干【阻塞状态】。如果没做好,店员一样是回答还没有,如果做好了,则是把奶茶拿到前台【拷贝到用户空间】并且告知客户,让客户过来拿走【read操作】跟阻塞IO唯一不同的是,在数据还没准备好之前,进程会一直重复的询问3。MultiplexingIO【IO多路复用】
  )MultiplexingIO,就是IO多路复用。在这里可能童鞋们就会发现这种IO方式跟前面的已经不同了,直接将IO多路复用可能大家不知道是什么,如果提到selectpollepoll,在这里肯定大家都有所耳闻。IO多路复用也叫EventDriverIO【事件驱动IO】。至于什么是selectpollepoll,等会再讲解先来看下IO多路复用是怎么工作的。从图中可以看到,操作系统提供了一个叫select的系统调用,当一个用户进程调用了select,则该用户进程所负责的所有socket同样被select所负责。对于内核,则监听着所有select负责的socket。当调用了select之后,select会不断的轮询所有的socket,当某个socket有数据到达了,select就会返回,告知用户进程将数据拷贝从内核空间拷贝到用户空间
  举例:跟上面的两种方式有很大的不同。假如有很多客户来买奶茶,每个客户用一个卡片将自己的姓名跟要买的奶茶型号写在上面,然后统一交给店员。每一次店员做好奶茶后,要在一堆卡片中,根据做好的奶茶型号找到对应的姓名,通知客户过来取奶茶。在这种方式上,每一次店员奶茶做好后,需要花大量的时间在一堆卡片中寻找客户。同样的,客户在等待奶茶做好之前,啥事都没干只有瞎等着【阻塞状态】4。AsynchronousIO【异步IO】
  AsynchronousIO也叫AIO,也就是异步IO。其实异步IO是最好理解的。异步IO就是当用户进程发起了一个系统调用之后,内核直接返回error,而用户进程接收到返回后,不再等待直接干其她事情去了。剩下的数据准备工作内核就自己去干了,等数据准备好了,不再通知用户进程来拷贝数据,而是自己顺手将数据从内核空间拷贝到用户空间。当所有事情都做完之后,只需要给用户进程发送一个信号【Signal】,告知到用户进程直接读取数据就行了【进程read操作】
  举例:客户到奶茶店后,直接跟店员说要买哪种奶茶,然后留一个电话号码给店员就回去了【不再是阻塞状态了】,店员在奶茶做好后,再打电话通知客户过来取在AIO这个方式上,最大最大的区别在于,当进程发起系统调用,进程不再傻乎乎的等着了,而是去处理其他事情去了5。SignalDrivenIO【信号驱动IO】
  SignalDrivenIO也叫SIGIO,也就是信号驱动IO。信号驱动IO在实际的开发中是很少用到的,因为无用的信号太多了。在该模型中,从图中可以看出当进程调用了系统调用后,该模型会给对用的socket请求建立一个信号处理器,进程并不会被挂起。当内核准备好数据时,内核就会产生一个SIGIO信号给之前建立好的信号处理器,然后信号处理器就可以进行读写操作。由于该模型很少使用,在这里不再详细讲述第二个问题:同步异步阻塞非阻塞有啥区别首先,在开始之前,重要的事情说三遍
  此处要讲解的概念跟上面五种IO模型中提到的同步异步阻塞非阻塞没有绝对的关联关系
  此处要讲解的概念跟上面五种IO模型中提到的同步异步阻塞非阻塞没有绝对的关联关系
  此处要讲解的概念跟上面五种IO模型中提到的同步异步阻塞非阻塞没有绝对的关联关系在这里要理解同步异步阻塞非阻塞的区别,先清空一下脑袋,不要将这里的概念跟IO模型中提到的字眼联系到一块,否则它会影响你对概念的理解!!!先来看下什么是同步异步顾名思义,字面上的意思就可以看出了。所谓的同步,就是不同的个体之间在完成同一个任务时,过程的协调性是一致的,在完成这个任务的过程中,其中的任何一个步骤要是出现问题,那么剩下的步骤必须得等到出现问题的步骤恢复正常才能继续执行任务。具体一点,比如说军训走正步的时候,每个人的步伐是一致的,如果走到一半有一个人摔倒了,那么其他人必须停下来等这个站起来后才能继续走正步;做早操的时候,每个童鞋的动作是一致的,如果有一个人鞋带掉了在绑鞋带,那么其他人就要等着直到这个人恢复做早操才能继续。而异步也是同样的道理,就是不同个体之间在完成同一个任务时,过程的协调性不一致。也就说在走正步的时候,没有必要每个人都保持同样的步调,只要保证最终每个人把走正步这个任务走完就行
  也就说,同步的概念是,一个任务的执行过程涉及到的步骤或者个体,它们是一种前后顺序都安排好的依赖关系,当一个步骤或者个体出现问题时,该顺序不可调,只能等着;而异步的概念则相反,没有严格的前后顺序和依赖关系。也就说同步异步表达的是顺序和依赖关系注意:有必要提到的一点是,不同的个体是在完成同一个任务,而不是各自干不同的事情再来看下什么是阻塞非阻塞同样的从字面上的意思就可以理解了。所谓阻塞,很简单的,就是卡住了,就是在执行一个任务的过程中,卡在那边不动了一直保持着一种状态而导致任务无法继续执行下去。相反的,非阻塞的就是执行任务的过程中遇到阻碍,不是卡着不动,而是干其他事情去了。同样的举例子,在走正步的过程中,如果遇到了障碍,阻塞的方式就是等在那边,等到阻碍解除了再继续走。如果是非阻塞方式,那就是人都跑光了干其他事情去了,等到障碍解除了再从那个位置继续走。注意,这里必须回来继续走正步完成任务
  也就是说,阻塞与非阻塞的概念是,一个任务的执行过程涉及到的步骤或者个体,它们在执行任务的过程中,其中的一个步骤或者个体出现问题时,剩下的是一直等着啥事也不干,还是跑去干其他事情去了。也就是说,阻塞非阻塞表达的是等待时的状态同样要注意的:在阻塞非阻塞的概念中,也是基于要完成一个完整的任务过程而言的讲到这里再重复一遍,对于同步异步阻塞非阻塞的理解,只需要理解其字面上的意思就行了。很多人被混淆了,是因为在介绍五种IO模型中提到了同样的字眼,才导致理解困难的整明白了概念之后,再来看下跟五种IO模型有啥关系同步异步阻塞非阻塞组合在一起,那就有四种不同的组合:同步阻塞同步非阻塞异步阻塞异步非阻塞在结合上面讲解的五种IO模型中我们就可以看出哪中IO模型属于组合。先睹为快,直接画一个表格矩阵简单明了的归纳【信号驱动IO由于用的极少,就不再说明了】
  阻塞
  非阻塞
  同步
  BIOMultiplexingIO
  NIO
  异步
  AIO先来看下BIO从上面的IO模型图中可以看出,当进程发起了系统调用的之后,进程是啥也不干的,也就是阻塞的状态的,一直卡在那边。而内核在把数据准备好了之后并且从内核空间拷贝到用户空间,这时候进程就获取到了数据。可以看出,进程发起系统调用到结束,在内核没有准备好数据之前进程是没有结束的,也就是进程的完成需要依赖于内核操作全部完成,否则该进程的调用永远也完结不了,也就是说进程跟内核是同步的。所以BIO是属于同步阻塞IO再来看NIO同样的从IO模型图中可以看出,NIO与BIO唯一不同的是,在等待内核处理好数据之前,进程不是傻傻的啥事不干,而是一直在轮询,说明了是非阻塞的。而进程获取数据也是等到内核处理好数据之后将数据从内核空间拷贝到用户空间,进程再过来读取,说明是同步的操作。所以NIO是同步非阻塞IO再来看MultiplexingIO在IO多路复用中,本质上是和BIO是一样的。不同的是系统提供了一个机制,这种机制可以用来一次处理很多请求。但是对于进程的状态以及获取数据结果的过程,都是阻塞的状态和同步的过程。所以MultiplexingIO也是同步阻塞IO最后一个AIO从上面的IO模型图中就可以很直接明了的看出了,当进程发起系统调用之后,就不再继续等待了,而是直接继续执行,干其他事情去了,这说明是非阻塞的方式。而在内核准备好数据后,则是将数据拷贝到用户空间。而这个时候,不同于同步的方式,进程不需要等到数据拷贝到用户空间才能结束,在AIO模式中,进程相对已经结束了,因为干其他事情去了。要通知进程过来读取数据,需要用到回调的方式通知进程过来读取数据。所以AIO是异步非阻塞IO第三个问题:什么是selectpollepoll首先说明的是,selectpollepoll是一种机制这种机制是来实现IO多路复用的。那么这种机制是怎么实现的,就是内核提供了一种方式来实现一个进程可以监听多个不同的描述符,一旦有描述符数据准备就绪,就通知进程过来读取数据。而selectpollepoll就是来实现这个方式的三种不同的方法select在select实现的过程中,在一个或多个进程管理着不同的描述符,每个描述符都有唯一的标识。当一个或多个进程向内核发起了select的系统调用后,内核就开始准备数据,当数据准备好后,要返回给对应进程中对应的描述符时,select需要遍历所有进程中所有的描述符,找到对应的发起请求的那个描述符后通知进程来读取数据。由于每次都要把select管理的进程轮询一遍,时间复杂度就是我们所说的O(N)复杂度。在select方式中,系统规定了单个进程中能够打开的描述符最大上限是1024个。至于为啥是1024个,这里就不再说明了
  举例来理解:还是上面提到的买奶茶的例子。当有不同的客户【进程】来买奶茶,同时每个客户还要帮各自的朋友们买【描述符】,不过每个客户最多只能帮1024个朋友买【上限1024个描述符】,多的就不行了。这时候这些客户把自己的身份证号,自己朋友的生份证号,还有排队编号写在了一张卡片上交给了店员。等到奶茶做好后,店员就在这一堆卡片中,根据排队编号找到对应的客户身份证号,再通知客户过来取奶茶,再把奶茶送到对应的朋友手中。在这个过程中,每次店员都要把每一张卡片看遍【轮询遍历】,这就是所谓的O(N)复杂度,很明显,这很耗时间
  poll的实现过程其实和select是一样的,只不过poll方式没有select有1024个最大描述符的限制epoll在epoll方式中,跟select和poll方式不同的是,当一个或多个进程向内核发起了epoll调用后,内核这个时候就给该进程的描述符注册一个回调函数,在内核准备好数据后,让对应的描述符的进程自己过来读取数据,每一次只需要通知一个进程就行了,这个时间复杂度就是O(1)复杂度,很明显,这比O(N)复杂度效率高的太多了
  举例来理解:还是同样的买奶茶的例子。当这些不同的客户过来买奶茶时,不再是扔一堆卡片跟店员了,而是店员给每一个客户一个呼叫机【注册了一个回调函数】,当呼叫机对应的奶茶做好后,就通知客户【进程】过来拿奶茶,这时候店员的工作量就已经是最小的了,每一次只需要通知到一个客户就行,这样效率就高太多了以上就是关于selectpollepoll方式的说明,在这里只提到了怎么通俗的理解这三种方式,其他的一些技术上的理解就不再说明了总结在现代的操作系统中有五种IO模型,其中常用的有BIONIOMultiplexingIO和AIO这四种,其中BIOMultiplexingIO是同步阻塞IO,NIO是同步非阻塞IO,AIO是异步非阻塞IO同步异步指的是进程在IO过程中的协调性是否一致,同步表示一致,异步表示不一致;阻塞非阻塞指的是进程在IO过程中的状态表示,阻塞表示一直在等待,非阻塞表示不等待去执行其他任务selectpollepoll都是实现MultiplexingIO的三种不同的方式。最大的区别在于性能上,selectpoll是O(N)时间复杂度,epoll则是超高效率的O(1)时间复杂度欢迎来我的博客逛一逛杨建勇的个人博客http:yangjianyong。cn

我科学家研发二氧化碳高效转化新机制来源:人民网人民日报本报合肥12月16日电(记者徐靖)近日,中国科学技术大学教授曾杰与电子科技大学教授夏川、中国科学院大连化学物理研究所研究员肖建平合作,基于固态电解质开……特斯拉扩充中国公关团队,招聘范围十大城市,网友终于想通了扩大公关招聘规模,不需要公关的特斯拉终于想通了?8月16日,特斯拉招聘的官方公号发布一则名为特斯拉职能部门最新职位汇总的推文,在这些招聘岗位中,除了较为常规的财务、人力资……苹果手机可以用多少年?2021年用iPhone7是什么体验?iPhone7大家好,我是指尖,今天跟大家聊聊,2021年我在用iPhone7做什么事情,以及为什么用它。这部手机是我在2017年年底买的,2020年双十一后退居二……你现在用的什么手机?再换机还用这个品牌的吗?谢邀!其实因为过去一年半之间,因为职业属性的机缘巧合,让我连续使用了两代vivoX系列的产品,包括上一代的vivoX50Pro以及这一代的vivoX60Pro,而现在,v……技术100自研,芯片算力超过苹果A15,OPPO能否成第二个看到一些键盘X在那里酸我就真忍不住了,在这群人眼中,除了华为自研芯片是正统外,MOV三家搞科研、搞芯片都是面子工程,各种冷嘲热讽。反正在这群人眼中,不管怎么做都是错的。说……iPhone更新有两种常规方法,一是在iTunes更新,二是感谢您的阅读!【苹果手机到底是ios更新好,还是OTA线上更新好?】最近很多人问我iphone手机应该怎么样去更新,特别是全新的IOS14系统,我们是通过手机直接线……储能风口与硬核技术双重加持南网科技即将登陆科创板本报见习记者张军兵随着首次公开发行价格的确定,南网科技(688248。SH)距正式登陆科创板仅一步之遥。12月9日,南网科技披露发行公告称,本次公开发行股票数量为8……供应链称苹果或将削减新iPhoneSE产量市场预期不乐观【手机中国新闻】来自供应链消息,苹果可能会在下个季度削减新iPhoneSE的产量,预计削减达到20,很快苹果又在近期通知多家供应商,生产订单减少约200万至300万部。其主要原……Android12正式发布,设计大改亮点十足最近几天,科技圈最万众期待的是什么,那莫过于是GoogleIO2021大会了。2020年由于疫情影响,取消了GoogleIO大会。而这次转为线上举办。作为Googl……微信聊天语音记录会在腾讯服务器保存多久?微信的文字和语音聊天记录都是保存在手机本地的。你用一段时间微信就会发现微信的体积越来越大,有好几个G,这全部都是微信的聊天记录。微信所有的聊天记录都是通过腾讯的服务器进行……FileJuicerv4。71一款Mac平台用于提取文件包内FileJuicer是一款Mac平台用于提取文件包内容的工具,是一款异常强大的提取文件包内容的实用办公工具。可提取word、ppt等档案中的图片文件,显然也可提取PDF文件中的……iOS12还有这些隐藏小技巧?iPhone这下买值了!【PConline资讯】距离iOS12发布已经有一段时间了,iOS12经过精心设计、系统性能优化以及各种新增功能,如今已经深受果粉们的爱戴,目前有80以上的苹果设备正在使用iO……
那些被低估的4G手机,你知道多少?虽然现在是5G时代,但是又很多4G手机,还是非常划算的。如红米K30,搭载了骁龙730G处理器,日常运行都很流畅。屏幕上,采用了120HZ的刷新率,要知道小米10系……游戏音乐双模式!SanagH2SPRO不止是电竞游戏耳机作为一个数码宅男,不可否认,我是一个游戏重度玩家,平时的爱好是吃鸡、王者还有原神,几款游戏玩累了、玩腻了,就来回切换着玩。因此,对于耳机的需求,特别是游戏耳机的需求,可以……人民日报批虚假广告滥用极限词规范网络电商广告用语全网仅一家史上最低价销量总冠军行业领导者打开互联网平台的商品页、直播间,广告极限词并不鲜见。一些消费者被类似广告吸引,购买商品或服务后却发现名不副实,既影响体验也面临维权难题。……告别无用配置的堆砌,骁龙870加持的iQOONeo5活力版很在现有的智能手机市场中,两千元价位的手机一直有着极高的热度,所以各大手机厂商都会在这一档位推出强力的产品吸引消费者。而前不久发布的2K档机型iQOONeo5活力版就有着极高的热……联想事件让你联想到了什么?任何企业法人都离不开毛泽东思想的深入学习和接受教育,否则知识分子也容易走向国家和人民的对立面,至于那些草根创业者,就更需要警钟长鸣,一旦离开了国家和人民的监督,都容易走向思想的……用酷狗旋转音效播放这张歌单,你连伸懒腰都是优雅的当你坐进一家咖啡馆,被浓郁的香气催促着点单,片刻等待后,热乎乎飘着暖气的杯子被递上来,你陷入一个难题,是直接喝掉一大口么?还是傻乎乎地吹气?很简单,打开酷狗,通过旋转与优雅搜出……为什么可以使用洗碗机?特别是那些学校,酒店,企业等,以及所有的餐饮具集中消毒公司都在使用。为什么洗碗机能得到广泛的应用?1。节省时间和精力。随着社会的发展,人们的生活水平越来越高。越来越多的微……展现活力之两人三足为了加强儿童的心理健康素质教育,营造积极、主动的氛围,全面推进儿童心理健康教育,促进儿童的全面发展和健康成长。3月18日,恩夕社工联合党群服务中心开展展现活力之两人三足活动。……比特币本周逐渐稳住脚步,最大的持有者没有受到震荡影响美国一家专注于区块链和加密技术的投资顾问公司Arca的首席投资官(CIO)JeffDorman表示,在其参与者被令人担忧的报告吓到之后,本周市场看起来更加健康。Arca表……世界之窗牛年夜景烟花秀牛年第一天,去世界之窗溜了一波老朋友的娃,刚出生的小孩子看到啥都觉得新奇,尤其是五颜六色的灯光。第一次抱这么久的娃,这手还真酸痛,比爬山辛苦多了。看不到烟花的我,去世界之窗看了……雅本化学前三季度净利润预计持续增长,大健康业务经营效益显著10月11日晚间,雅本化学(300261。sz)发布2021年前三季度业绩预告,预计前三季度归属于上市公司股东的净利润为1。4亿至1。5亿元,同比增长14。26至22。42。2……我秃了!!!我是个程序员也曾是个秀发浓密的程序员但如今看着镜中光亮如新的自己突然思绪万千。。。。。。生活从不会亏欠我们的每一份努力。我们看的每一本书、上……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网