epoll原理(select poll和epoll的区别)

2025-03-25 18:50:01 0

epoll原理(select poll和epoll的区别)

本文目录

select poll和epoll的区别

随着2.6内核对epoll的完全支持,网络上很多的文章和示例代码都提供了这样一个信息:使用epoll代替传统的poll能给网络服务应用带来性能上的提升。但大多文章里关于性能提升的原因解释的较少,这里我将试分析一下内核(2.6.21.1)代码中poll与epoll的工作原理,然后再通过一些测试数据来对比具体效果。POLL:先说poll,poll或select为大部分Unix/Linux程序员所熟悉,这俩个东西原理类似,性能上也不存在明显差异,但select对所监控的文件描述符数量有限制,所以这里选用poll做说明。poll是一个系统调用,其内核入口函数为sys_poll,sys_poll几乎不做任何处理直接调用do_sys_poll,do_sys_poll的执行过程可以分为三个部分:1,将用户传入的pollfd数组拷贝到内核空间,因为拷贝操作和数组长度相关,时间上这是一个O(n)操作,这一步的代码在do_sys_poll中包括从函数开始到调用do_poll前的部分。2,查询每个文件描述符对应设备的状态,如果该设备尚未就绪,则在该设备的等待队列中加入一项并继续查询下一设备的状态。查询完所有设备后如果没有一个设备就绪,这时则需要挂起当前进程等待,直到设备就绪或者超时,挂起操作是通过调用schedule_timeout执行的。设备就绪后进程被通知继续运行,这时再次遍历所有设备,以查找就绪设备。这一步因为两次遍历所有设备,时间复杂度也是O(n),这里面不包括等待时间。相关代码在do_poll函数中。3,将获得的数据传送到用户空间并执行释放内存和剥离等待队列等善后工作,向用户空间拷贝数据与剥离等待队列等操作的的时间复杂度同样是O(n),具体代码包括do_sys_poll函数中调用do_poll后到结束的部分。EPOLL:接下来分析epoll,与poll/select不同,epoll不再是一个单独的系统调用,而是由epoll_create/epoll_ctl/epoll_wait三个系统调用组成,后面将会看到这样做的好处。先来看sys_epoll_create(epoll_create对应的内核函数),这个函数主要是做一些准备工作,比如创建数据结构,初始化数据并最终返回一个文件描述符(表示新创建的虚拟epoll文件),这个操作可以认为是一个固定时间的操作。epoll是做为一个虚拟文件系统来实现的,这样做至少有以下两个好处:1,可以在内核里维护一些信息,这些信息在多次epoll_wait间是保持的,比如所有受监控的文件描述符。2, epoll本身也可以被poll/epoll;具体epoll的虚拟文件系统的实现和性能分析无关,不再赘述。在sys_epoll_create中还能看到一个细节,就是epoll_create的参数size在现阶段是没有意义的,只要大于零就行。接着是sys_epoll_ctl(epoll_ctl对应的内核函数),需要明确的是每次调用sys_epoll_ctl只处理一个文件描述符,这里主要描述当op为EPOLL_CTL_ADD时的执行过程,sys_epoll_ctl做一些安全性检查后进入ep_insert,ep_insert里将 ep_poll_callback做为回掉函数加入设备的等待队列(假定这时设备尚未就绪),由于每次poll_ctl只操作一个文件描述符,因此也可以认为这是一个O(1)操作ep_poll_callback函数很关键,它在所等待的设备就绪后被系统回掉,执行两个操作:1,将就绪设备加入就绪队列,这一步避免了像poll那样在设备就绪后再次轮询所有设备找就绪者,降低了时间复杂度,由O(n)到O(1);2,唤醒虚拟的epoll文件;最后是sys_epoll_wait,这里实际执行操作的是ep_poll函数。该函数等待将进程自身插入虚拟epoll文件的等待队列,直到被唤醒(见上面ep_poll_callback函数描述),最后执行ep_events_transfer将结果拷贝到用户空间。由于只拷贝就绪设备信息,所以这里的拷贝是一个O(1)操作。还有一个让人关心的问题就是epoll对EPOLLET的处理,即边沿触发的处理,粗略看代码就是把一部分水平触发模式下内核做的工作交给用户来处理,直觉上不会对性能有太大影响,感兴趣的朋友欢迎讨论。POLL/EPOLL对比:表面上poll的过程可以看作是由一次epoll_create/若干次epoll_ctl/一次epoll_wait/一次close等系统调用构成,实际上epoll将poll分成若干部分实现的原因正是因为服务器软件中使用poll的特点(比如Web服务器):1,需要同时poll大量文件描述符;2,每次poll完成后就绪的文件描述符只占所有被poll的描述符的很少一部分。3,前后多次poll调用对文件描述符数组(ufds)的修改只是很小;

nginx 怎么开启epoll

Linux平台上,Nginx使用epoll完成事件驱动,实现高并发;本文将不对epoll本身进行介绍(网上一堆一堆的文章介绍epoll的原理及使用方法,甚至源码分析等),仅看一下Nginx是如何使用epoll的。 Nginx在epoll模块中定义了好几个函数,这些函数基本...

epoll下ET模式为何一定要用要用非阻塞的模式~

ET 模式是一种边沿触发模型,在它检测到有 I/O 事件时,通过 epoll_wait 调用会得到有事件通知的文件描述符,每于每一个被通知的文件描述符,如可读,则必须将该文件描述符一直读到空,让 errno 返回 EAGAIN 为止,否则下次的 epoll_wait 不会返回余下的数据,会丢掉事件。而如果你的文件描述符如果不是非阻塞的,那这个一直读或一直写势必会在最后一次阻塞。epoll ET 一般的调用如下:

while (1){    int nFDs = epoll_wait(nEpollFD, events, 128, &timeout);    for (int i = 0; i 《 nFDs; i ++)    {        if (events.events & EPOLLIN)        {            // 套接字有读事件,要读空,直到 recv 返回 -1 而且 errno == EAGAIN            // 监听套接字可 accept 或套接字可读,都会得到可读通知        }                ...    }}

 顺便贴个文件给你看看,比较详细,这类的文章还是挺多的,真正了解一下它们的原理就比较好理解了。

http://www.ccvita.com/515.html

比较说明nginx epoll模式和apache worker模式的区别

1、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃,各种高性能模块出品迅速啊 apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大 动态页面模块超多,基本想到的都可以找到 少bug ,nginx 的bug 相对较多 超稳定 存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。 2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型. Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多. 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验. Nginx 是一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 . 3、Nginx 配置简洁, Apache 复杂 Nginx 静态处理性能比 Apache 高 3倍以上 Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用 Apache 的组件比 Nginx 多 现在 Nginx 才是 Web 服务器的首选 4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 5、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式. apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx做前端,後端用apache。大型网站建议用nginx自代的集群功能6、从个人过往的使用情况来看,nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。7、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。 8、从我个人的经验来看,nginx是很不错的前端服务器,负载性能很好,在老奔上开nginx,用webbench模拟10000个静态文件请求毫不吃力。apache对php等语言的支持很好,此外apache有强大的支持网路,发展时间相对nginx更久,9、Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;其他的当然,Nginx可能会比apache支持更高的并发,但是根据NetCraft的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是7.35%,因此总得来说,Aapche依然是大部分公司的首先,因为其成熟的技术和开发社区已经也是非常不错的性能。 10、你对web server的需求决定你的选择。大部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持连接等等。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。 11、可以看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物 12、对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器 13、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧

怎么通俗理解python epoll

首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。

现在我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?

阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做);那么你可以去睡觉了,因为你知道快递把货送来时一定会给你打个电话(假定一定能叫醒你)。

非阻塞忙轮询:接着上面等快递的例子,如果用忙轮询的方法,那么你需要知道快递员的手机号,然后每分钟给他挂个电话:“你到了没?”

很明显一般人不会用第二种做法,不仅显很无脑,浪费话费不说,还占用了快递员大量的时间。

大部分程序也不会用第二种做法,因为第一种方法经济而简单,经济是指消耗很少的CPU时间,如果线程睡眠了,就掉出了系统的调度队列,暂时不会去瓜分CPU宝贵的时间片了。

为了了解阻塞是如何进行的,我们来讨论缓冲区,以及内核缓冲区,最终把I/O事件解释清楚。缓冲区的引入是为了减少频繁I/O操作而引起频繁的系统调用(你知道它很慢的),当你操作一个流时,更多的是以缓冲区为单位进行操作,这是相对于用户空间而言。对于内核来说,也需要缓冲区。

假设有一个管道,进程A为管道的写入方,B为管道的读出方。一开始内核缓冲区是空的,B作为读出方,被阻塞着。然后首先A往管道写入,这时候内核缓冲区由空的状态变到非空状态,内核就会产生一个事件告诉B该醒来了,这个事件姑且称之为“缓冲区非空”。但是“,缓冲区非空”事件通知B后,B却还没有读出数据;且内核许诺了不能把写入管道中的数据丢掉这个时候,A写入的数据会滞留在内核缓冲区中,如果内核也缓冲区满了,B仍未开始读数据,最终内核缓冲区会被填满,这个时候会产生一个I/O事件,告诉进程A,你该等等(阻塞)了,我们把这个事件定义为“缓冲区满”。后来B终于开始读数据了,于是内核的缓冲区空了出来,这时候内核会告诉A,内核缓冲区有空位了,你可以从长眠中醒来了,继续写数据了,我们把这个事件叫做“缓冲区非满”。也许事件“缓冲区非满“已经通知了A,但是A也没有数据写入了,而B继续读出数据,知道内核缓冲区空了。这个时候内核就告诉B,你需要阻塞了!,我们把这个时间定为“缓冲区空”。

这四个情形涵盖了四个I/O事件,缓冲区满,缓冲区空,缓冲区非空,缓冲区非满(注都是说的内核缓冲区,且这四个术语都是我生造的,仅为解释其原理而造)。这四个I/O事件是进行阻塞同步的根本。(如果不能理解“同步”是什么概念,请学习操作系统的锁,信号量,条件变量等任务同步方面的相关知识)。

然后我们来说说阻塞I/O的缺点:阻塞I/O模式下,一个线程只能处理一个流的I/O事件。如果想要同时处理多个流,要么多进程(fork),要么多线程(pthread_create),很不幸这两种方法效率都不高。

现在我们再来考虑一下”非阻塞忙轮询“的I/O方式,我们发现我们可以同时处理多个流了(把一个流从阻塞模式切换到非阻塞模式再此不予讨论):

 view plain copy 

  • while true {  

  • for i in stream; {  

  • if i has data  

  • read until unavailable  

  • }  

  • }  

  •  view plain copy

  • while true {  

  • for i in stream; {  

  • if i has data  

  • read until unavailable  

  • }  

  • }  

  •   
  • 我们只要不停的把所有流从头到尾问一遍,又从头开始,这样就可以处理多个流了。但这样的做法显然不好,因为如果所有的流都没有数据,那么只会白白浪费CPU。这里要补充一点,阻塞模式下,内核对于I/O事件的处理是阻塞或者唤醒,而非阻塞模式下则把I/O事件交给其他对象(后文介绍的select以及epoll)处理甚至直接忽略。

    为了避免CPU空转,可以引进了一个代理(一开始有一位叫做select的代理,后来又有一位叫做poll的代理,不过两者的本质是一样的)。这个代理比较厉害,可以同时观察许多流的I/O事件,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中醒来,于是我们的程序就会轮询一遍所有的流(于是我们可以把“忙”字去掉了)。代码长这样:

     view plain copy 

  • while true {  

  • select(streams)  

  • for i in streams {  

  • if i has data  

  • read until unavailable  

  • }  

  • }  

  •  view plain copy

  • while true {  

  • select(streams)  

  • for i in streams {  

  • if i has data  

  • read until unavailable  

  • }  

  • }  

  • 于是,如果没有I/O事件产生,我们的程序就会阻塞在select处。但是依然有个问题,我们从select那里仅仅知道了,有I/O事件发生了,但却并不知道是那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据或者写入数据的流,对他们进行操作。

    但是使用select,我们有O(n)的无差别轮询复杂度,同时处理的流越多,每一次无差别轮询时间就越长。再次

    说了这么多,终于能好好解释epoll了,epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll之会把哪个流发生了怎样的I/O事件通知我们。此时我们对这些流的操作都是有意义的。(复杂度降低到了O(1))

    在讨论epoll的实现细节之前,先把epoll的相关操作列出:

    epoll_create 创建一个epoll对象,一般epollfd = epoll_create()

    epoll_ctl (epoll_add/epoll_del的合体),往epoll对象中增加/删除某一个流的某一个事件,比如:

    epoll_ctl(epollfd, EPOLL_CTL_ADD, socket, EPOLLIN);//注册缓冲区非空事件,即有数据流入

    epoll_ctl(epollfd, EPOLL_CTL_DEL, socket, EPOLLOUT);//注册缓冲区非满事件,即流可以被写入

    epoll_wait(epollfd,...)等待直到注册的事件发生

    (注:当对一个非阻塞流的读写发生缓冲区满或缓冲区空,write/read会返回-1,并设置errno=EAGAIN。而epoll只关心缓冲区非满和缓冲区非空事件)。

    一个epoll模式的代码大概的样子是:

     view plain copy 

  • while true {  

  • active_stream = epoll_wait(epollfd)  

  • for i in active_stream {  

  • read or write till  

  • }  

  • }  

  •  view plain copy

  • while true {  

  • active_stream = epoll_wait(epollfd)  

  • for i in active_stream {  

  • read or write till  

  • }  

  • }  

nginx 源码 epoll模块在哪个文件

Linux平台上,Nginx使用epoll完成事件驱动,实现高并发;本文将不对epoll本身进行介绍(网上一堆一堆的文章介绍epoll的原理及使用方法,甚至源码分析等),仅看一下Nginx是如何使用epoll的。 Nginx在epoll模块中定义了好几个函数,这些函数基本都是作为回调注册到事件抽象层的对应接口上,从而实现了事件驱动的具体化,我们看如下的一段代码:.events; /*记录wait的错误返回状态*/ if (revents & (EPOLLERR|EPOLLHUP)) { ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, “epoll_wait() error on fd:%d ev:%04XD“, c-》fd, revents); } if ((revents & (EPOLLERR|EPOLLHUP)) && (revents & (EPOLLIN|EPOLLOUT)) == 0) { /* * if the error events were returned without EPOLLIN or EPOLLOUT, * then add these flags to handle the events at least in one * active handler */ revents |= EPOLLIN|EPOLLOUT; } /*该事件是一个读事件,并该连接上注册的读事件是active的*/ if ((revents & EPOLLIN) && rev-》active) { if ((flags & NGX_POST_THREAD_EVENTS) && !rev-》accept) { rev-》posted_ready = 1; } else { rev-》ready = 1; } /*事件放入相应的队列中;关于此处的先入队再处理,在前面的文章中已经介绍过了。*/ if (flags & NGX_POST_EVENTS) { queue = (ngx_event_t **) (rev-》accept ? &ngx_posted_accept_events : &ngx_posted_events); ngx_locked_post_event(rev, queue); /*入队*/ } else { rev-》handler(rev); } } wev = c-》write; /*发生的是一个写事件,和读事件完全一样的逻辑过程*/ if ((revents & EPOLLOUT) && wev-》active) { if (flags & NGX_POST_THREAD_EVENTS) { wev-》posted_ready = 1; } else { wev-》ready = 1; } /*先入队再处理*/ if (flags & NGX_POST_EVENTS) { ngx_locked_post_event(wev, &ngx_posted_events); } else { wev-》handler(wev); } } } return NGX_OK; } 本文将关注的两个epoll函数也就这么一点代码了,但整个epoll还有添加事件和删除事件等的相关函数,代码都很简单,本文就不做具体的分析了。 写到此处的时候,我感觉epoll模块没有分析的足够详细,或者说是没有足够的理解作者的用意,如果你有更好的理解,希望能够告诉我。或许,随着后面的分析,能够逐渐的真正明白吧。

epoll原理(select poll和epoll的区别)

本文编辑:admin

更多文章:


阿里云maven仓库地址(eclipse怎么连接maven阿里云中央仓库)

阿里云maven仓库地址(eclipse怎么连接maven阿里云中央仓库)

本文目录eclipse怎么连接maven阿里云中央仓库如何查看maven本地仓库路径怎样更新自己本地maven仓库eclipse怎么连接maven阿里云中央仓库修改maven根目录下的conf文件夹中的setting.xml文件,如果你跟我

2025年3月4日 09:30

js中时钟特效代码(js Canvas实现的日历时钟案例有哪些)

js中时钟特效代码(js Canvas实现的日历时钟案例有哪些)

本文目录js Canvas实现的日历时钟案例有哪些JS简单时钟的小白问题用JavaScript编写一个动态实时显示的数字时钟代码谁能解释下JS实现的时钟功能代码的意义吗万分感谢!javascript动态显示时间用JS实现钟表计时器功能求Ja

2025年2月19日 08:30

表单注册页面代码(求java表单验证制作注册页面的代码)

表单注册页面代码(求java表单验证制作注册页面的代码)

本文目录求java表单验证制作注册页面的代码javascript写的注册页面代码java表单验证注册页面代码HTML5网页前端设计中如下图表单的代码怎么写PHP注册页面表单验证:要完整代码求java表单验证制作注册页面的代码简单举例:fun

2025年3月29日 18:40

ppt模板全套免费下载(PPT模板下载后如何整理)

ppt模板全套免费下载(PPT模板下载后如何整理)

本文目录PPT模板下载后如何整理如何做一个好的PPT模板应该去哪里找PPT模板下载后如何整理我是爱做PPT的PP匞。很多人学习PPT都是从下载PPT模板,临摹PPT模板开始的。1套,2套…1G,2G…桌面,硬盘,塞得满满的。每次打开电脑,用

2025年3月10日 15:40

vs2005(vs2005和vs2008有什么区别)

vs2005(vs2005和vs2008有什么区别)

本文目录vs2005和vs2008有什么区别vs2005比起vs2015都少了什么请问VS2005包含了VB2005的所有功能吗什么是 VS2005,有什么用,vs2005和vs2008有什么区别1. 新的网页设计介面 VS 终於可以支援巢

2025年3月23日 17:00

栈和队列的存储方式(栈和队列的存储方式)

栈和队列的存储方式(栈和队列的存储方式)

本文目录栈和队列的存储方式程序中的栈和队列是什么意思简述栈和队列的顺序存储结构和链式存储结构的优缺点栈与队列的区别堆栈和队列 的本质区别线性表、栈、队列有何异同栈和队列的存储方式栈和队列都是在一个特定范围的存储单元中存储的数据,这些数据都可

2025年3月24日 00:30

delphine英文名(有没有De、开头的漂亮英文名)

delphine英文名(有没有De、开头的漂亮英文名)

本文目录有没有De、开头的漂亮英文名“蒂”开头的英文名有没有De、开头的漂亮英文名以下供你参考: Deanna 迪安娜 女性 古代英语“蒂”开头的英文名Decla 善良,优秀 女性 Delicia 愉快的人 女性

2025年2月23日 11:30

江苏移动官网(中国移动运营商官网)

江苏移动官网(中国移动运营商官网)

本文目录中国移动运营商官网怎样登录江苏移动门户网站怎样登录中国移动官方网站中国移动运营商官网中国移动官网:www.10086.cn。中国移动掌上营业厅官网:wap.10086.cn。中国移动官方网站提供业务介绍,手机话费充值查询,套餐资费介

2025年3月19日 10:40

audio接口在主板哪里(电脑前面的耳机插口,连到主板什么地方)

audio接口在主板哪里(电脑前面的耳机插口,连到主板什么地方)

本文目录电脑前面的耳机插口,连到主板什么地方audio接口在主板哪里请问电脑机箱里面AUDIO是什么接口啊机箱的AUDIO线 连接在哪里台式audio应该插在哪里华硕h110mk主板f audio的插槽在那里hd audio插微星主板哪个

2025年2月18日 05:50

百度站长是什么?下载站的站长进

百度站长是什么?下载站的站长进

本文目录百度站长是什么下载站的站长进百度站长是什么百度站长平台:是全球最大的面向中文互联网管理者、移动开发者、创业者的搜索流量管理的官方平台。提供有助于搜索引擎抓取收录的提交和分析工具, SEO的优化建议等;面向移动开发者提供百度官方的AP

2025年2月19日 17:30

内存管理有哪几种方式(为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧)

内存管理有哪几种方式(为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧)

本文目录为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧Linux进程内存管理方法Windows内存管理的几种方式和优缺点进程内存管理方法常用的内存管理方法有哪些阐述操作系统是如何对cpu,内存和磁盘进行管理的操作系统内存管理的

2025年3月3日 00:50

微信小程序开发教程官方文档(微信小程序开发教程是怎样的)

微信小程序开发教程官方文档(微信小程序开发教程是怎样的)

本文目录微信小程序开发教程是怎样的微信小程序开发文档,微信小程序怎么开发微信小程序开发教程是怎样的微信小程序开发教程的标准就是微信开放文档。微信小程序开发的注意事项:1、小程序名称可以由中文、数字、英文。长度在3-20个字符之间,一个中文字

2025年3月28日 14:20

禅道项目管理软件(禅道项目管理软件的历代版本)

禅道项目管理软件(禅道项目管理软件的历代版本)

本文目录禅道项目管理软件的历代版本求推荐一款集流程引擎+报表工具为一体的项目管理软件!禅道项目管理软件的介绍禅道项目管理软件的功能列表worktile和禅道哪个好用,那个适合项目管理禅道项目管理软件的功能特点项目管理软件哪款好,性价比较高禅

2025年2月18日 17:10

css样式分析(3种CSS样式表各应用于哪种场景)

css样式分析(3种CSS样式表各应用于哪种场景)

本文目录3种CSS样式表各应用于哪种场景简述css样式的主要作用CSS样式分为哪三种帮忙解读CSS样式什么是css样式CSS样式的主要特点及其类型3种CSS样式表各应用于哪种场景1》外部样式表 : 将样式规则直接写在*.css文件中,然后再

2025年3月23日 16:40

dell官网电话(戴尔售后电话,)

dell官网电话(戴尔售后电话,)

本文目录戴尔售后电话,如何拨打dell的客服电话戴尔客服电话是多少戴尔客服电话400请问戴尔客服电话是什么dell售后服务电话戴尔电脑的服务电话戴尔售后电话,1、戴尔灵越、Monitor显示器用户售后电话:800-858-2969。2、戴尔

2025年3月8日 06:30

educational exchange(去到国外去进行一些类似于educational exchange的体验活动,但不是出国留学那种,有什么弊端,至少三个)

educational exchange(去到国外去进行一些类似于educational exchange的体验活动,但不是出国留学那种,有什么弊端,至少三个)

本文目录去到国外去进行一些类似于educational exchange的体验活动,但不是出国留学那种,有什么弊端,至少三个关于“educational exchange“写一篇英语作文 80个单词左右the Council on Inte

2025年3月27日 01:10

个人网页设计网站(怎么建立自己的个人网站和网页如何设计)

个人网页设计网站(怎么建立自己的个人网站和网页如何设计)

本文目录怎么建立自己的个人网站和网页如何设计如何自己制作一个个人网站 具体步骤新手怎么制作自己的个人网站如何设计个人网站首页一个人如何去制作一个简单的网站怎么建立自己的个人网站和网页如何设计你好。要建立个人网站的话你得按照以下方式里进行:1

2025年2月18日 22:30

php简单的接口编写示例(php怎么写接口)

php简单的接口编写示例(php怎么写接口)

本文目录php怎么写接口php 接口大概要怎么写php中的API接口怎么写 php如何开发API接口php写一个类实现一个接口的例子php怎么写api接口php接口开发教程php中如何调用接口以及编写接口代码详解php怎么写接口接口是什么?

2025年2月25日 10:00

下拉框怎么设置默认值(如何设置下拉列表框(cobmo1)的默认值)

下拉框怎么设置默认值(如何设置下拉列表框(cobmo1)的默认值)

本文目录如何设置下拉列表框(cobmo1)的默认值如何在excel中建立下拉列表的默认值如何设置下拉列表框(cobmo1)的默认值可以使用selected属性来实现: 《select》 《option value=“1“》我是

2025年2月12日 11:50

xml后缀是什么文件(xml是什么后缀)

xml后缀是什么文件(xml是什么后缀)

本文目录xml是什么后缀后缀为xml的文件用什么软件打开.XML是什么文件xml文件扩展名是什么xml是什么扩展名xml是什么后缀什么是 XML? 可扩展标记语言 (XML) 是将结构数据(如工作表中的数据)加入文本文件(遵循标准原则,可

2025年2月26日 23:00

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索