为什么等待数据下载的过程中CPU将会cpu空闲时间百分比大量时间?

让天下没有难学的技术
多线程的优点
多线程的优点
原文:/java-concurrency/benefits.html
作者:Jakob Jenkov
翻译:古圣昌
校对:欧振聪
尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:
资源利用率更好
程序设计在某些情况下更简单
程序响应更快
资源利用率更好
想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:
5秒读取文件A
2秒处理文件A
5秒读取文件B
2秒处理文件B
---------------------
总共需要14秒
从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据。在这段时间里,CPU非常的空闲。它可以做一些别的事情。通过改变操作的顺序,就能够更好的使用CPU资源。看下面的顺序:
5秒读取文件A
5秒读取文件B + 2秒处理文件A
2秒处理文件B
---------------------
总共需要12秒
CPU等待第一个文件被读取完。然后开始读取第二个文件。当第二文件在被读取的时候,CPU会去处理第一个文件。记住,在等待磁盘读取文件的时候,CPU大部分时间是空闲的。
总的说来,CPU能够在等待IO的时候做一些其他的事情。这个不一定就是磁盘IO。它也可以是网络的IO,或者用户输入。通常情况下,网络和磁盘的IO比CPU和内存的IO慢的多。
程序设计更简单
在单线程应用程序中,如果你想编写程序手动处理上面所提到的读取和处理的顺序,你必须记录每个文件读取和处理的状态。相反,你可以启动两个线程,每个线程处理一个文件的读取和操作。线程会在等待磁盘读取文件的过程中被阻塞。在等待的时候,其他的线程能够使用CPU去处理已经读取完的文件。其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。
程序响应更快
将一个单线程应用程序变成多线程应用程序的另一个常见的目的是实现一个响应更快的应用程序。设想一个服务器应用,它在某一个端口监听进来的请求。当一个请求到来时,它去处理这个请求,然后再返回去监听。
服务器的流程如下所述:
while(server is active){
listen for request
process request
如果一个请求需要占用大量的时间来处理,在这段时间内新的客户端就无法发送请求给服务端。只有服务器在监听的时候,请求才能被接收。另一种设计是,监听线程把请求传递给工作者线程(worker thread),然后立刻返回去监听。而工作者线程则能够处理这个请求并发送一个回复给客户端。这种设计如下所述:
while(server is active){
listen for request
hand request to worker thread
这种方式,服务端线程迅速地返回去监听。因此,更多的客户端能够发送请求给服务端。这个服务也变得响应更快。
桌面应用也是同样如此。如果你点击一个按钮开始运行一个耗时的任务,这个线程既要执行任务又要更新窗口和按钮,那么在任务执行的过程中,这个应用程序看起来好像没有反应一样。相反,任务可以传递给工作者线程(word thread)。当工作者线程在繁忙地处理任务的时候,窗口线程可以自由地响应其他用户的请求。当工作者线程完成任务的时候,它发送信号给窗口线程。窗口线程便可以更新应用程序窗口,并显示任务的结果。对用户而言,这种具有工作者线程设计的程序显得响应速度更快。
原创文章,转载请注明: 转载自本文链接地址:
BGI 开发工程师
Latest posts by 古 圣昌 ()
Related posts:
(23 votes, average: 4.91 out of 5)
Loading...966,690 三月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
聊聊并发(三)——JAVA线程池的分析和使用
聊聊并发(三)——JAVA线程池的分析和使用
日. 估计阅读时间:
欲知区块链、VR、TensorFlow等潮流技术和框架,请锁定
相关厂商内容
ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);
创建一个线程池需要输入几个参数:
corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。
runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。 可以选择以下几个阻塞队列。
ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
maximumPoolSize(线程池最大大小):线程池允许创建的最大线程数。如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务。值得注意的是如果使用了无界的任务队列这个参数就没什么效果。
ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。
RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy,表示无法处理新任务时抛出异常。以下是JDK1.5提供的四种策略。
AbortPolicy:直接抛出异常。
CallerRunsPolicy:只用调用者所在线程来运行任务。
DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
DiscardPolicy:不处理,丢弃掉。
当然也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。
keepAliveTime(线程活动保持时间):线程池的工作线程空闲后,保持存活的时间。所以如果任务很多,并且每个任务执行的时间比较短,可以调大这个时间,提高线程的利用率。
TimeUnit(线程活动保持时间的单位):可选的单位有天(DAYS),小时(HOURS),分钟(MINUTES),毫秒(MILLISECONDS),微秒(MICROSECONDS, 千分之一毫秒)和毫微秒(NANOSECONDS, 千分之一微秒)。
向线程池提交任务
我们可以使用execute提交的任务,但是execute方法没有返回值,所以无法判断任务是否被线程池执行成功。通过以下代码可知execute方法输入的任务是一个Runnable类的实例。
threadsPool.execute(new Runnable() {
public void run() {
// TODO Auto-generated method stub
我们也可以使用submit 方法来提交任务,它会返回一个future,那么我们可以通过这个future来判断任务是否执行成功,通过future的get方法来获取返回值,get方法会阻塞住直到任务完成,而使用get(long timeout, TimeUnit unit)方法则会阻塞一段时间后立即返回,这时有可能任务没有执行完。
Future&Object& future = executor.submit(harReturnValuetask);
Object s = future.get();
} catch (InterruptedException e) {
// 处理中断异常
} catch (ExecutionException e) {
// 处理无法执行任务异常
} finally {
// 关闭线程池
executor.shutdown();
线程池的关闭
我们可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池,它们的原理是遍历线程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程,所以无法响应中断的任务可能永远无法终止。但是它们存在一定的区别,shutdownNow首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表,而shutdown只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程。
只要调用了这两个关闭方法的其中一个,isShutdown方法就会返回true。当所有的任务都已关闭后,才表示线程池关闭成功,这时调用isTerminaed方法会返回true。至于我们应该调用哪一种方法来关闭线程池,应该由提交到线程池的任务特性决定,通常调用shutdown来关闭线程池,如果任务不一定要执行完,则可以调用shutdownNow。
线程池的分析
流程分析:线程池的主要工作流程如下图:
从上图我们可以看出,当提交一个新任务到线程池时,线程池的处理流程如下:
首先线程池判断基本线程池是否已满?没满,创建一个工作线程来执行任务。满了,则进入下个流程。
其次线程池判断工作队列是否已满?没满,则将新提交的任务存储在工作队列里。满了,则进入下个流程。
最后线程池判断整个线程池是否已满?没满,则创建一个新的工作线程来执行任务,满了,则交给饱和策略来处理这个任务。
源码分析。上面的流程分析让我们很直观的了解了线程池的工作原理,让我们再通过源代码来看看是如何实现的。线程池执行任务的方法如下:
public void execute(Runnable command) {
if (command == null)
throw new NullPointerException();
//如果线程数小于基本线程数,则创建线程并执行当前任务
if (poolSize &= corePoolSize || !addIfUnderCorePoolSize(command)) {
//如线程数大于等于基本线程数或线程创建失败,则将当前任务放到工作队列中。
if (runState == RUNNING && workQueue.offer(command)) {
if (runState != RUNNING || poolSize == 0)
ensureQueuedTaskHandled(command);
//如果线程池不处于运行中或任务无法放入队列,并且当前线程数量小于最大允许的线程数量,
则创建一个线程执行任务。
else if (!addIfUnderMaximumPoolSize(command))
//抛出RejectedExecutionException异常
reject(command); // is shutdown or saturated
工作线程。线程池创建线程时,会将线程封装成工作线程Worker,Worker在执行完任务后,还会无限循环获取工作队列里的任务来执行。我们可以从Worker的run方法里看到这点:
public void run() {
Runnable task = firstT
firstTask =
while (task != null || (task = getTask()) != null) {
runTask(task);
} finally {
workerDone(this);
合理的配置线程池
要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:
任务的性质:CPU密集型任务,IO密集型任务和混合型任务。
任务的优先级:高,中和低。
任务的执行时间:长,中和短。
任务的依赖性:是否依赖其他系统资源,如数据库连接。
任务性质不同的任务可以用不同规模的线程池分开处理。CPU密集型任务配置尽可能小的线程,如配置Ncpu+1个线程的线程池。IO密集型任务则由于线程并不是一直在执行任务,则配置尽可能多的线程,如2*Ncpu。混合型的任务,如果可以拆分,则将其拆分成一个CPU密集型任务和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐率要高于串行执行的吞吐率,如果这两个任务执行时间相差太大,则没必要进行分解。我们可以通过Runtime.getRuntime().availableProcessors()方法获得当前设备的CPU个数。
优先级不同的任务可以使用优先级队列PriorityBlockingQueue来处理。它可以让优先级高的任务先得到执行,需要注意的是如果一直有优先级高的任务提交到队列里,那么优先级低的任务可能永远不能执行。
执行时间不同的任务可以交给不同规模的线程池来处理,或者也可以使用优先级队列,让执行时间短的任务先执行。
依赖数据库连接池的任务,因为线程提交SQL后需要等待数据库返回结果,如果等待的时间越长CPU空闲时间就越长,那么线程数应该设置越大,这样才能更好的利用CPU。
建议使用有界队列,有界队列能增加系统的稳定性和预警能力,可以根据需要设大一点,比如几千。有一次我们组使用的后台任务线程池的队列和线程池全满了,不断的抛出抛弃任务的异常,通过排查发现是数据库出现了问题,导致执行SQL变得非常缓慢,因为后台任务线程池里的任务全是需要向数据库查询和插入数据的,所以导致线程池里的工作线程全部阻塞住,任务积压在线程池里。如果当时我们设置成无界队列,线程池的队列就会越来越多,有可能会撑满内存,导致整个系统不可用,而不只是后台任务出现问题。当然我们的系统所有的任务是用的单独的服务器部署的,而我们使用不同规模的线程池跑不同类型的任务,但是出现这样问题时也会影响到其他任务。
线程池的监控
通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用
taskCount:线程池需要执行的任务数量。
completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。
largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。
getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+ getActiveCount:获取活动的线程数。
通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等。这几个方法在线程池里是空方法。如:
protected void beforeExecute(Thread t, Runnable r) { }
Java并发编程实战。
JDK1.6源码
方腾飞,花名清英,淘宝资深开发工程师,关注并发编程,目前在广告技术部从事无线广告联盟的开发和设计工作。个人博客: 微博: 欢迎通过我的微博进行技术交流。
感谢对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博()或者腾讯微博()关注我们,并与我们的编辑和其他读者朋友交流。
Author Contacted
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
Re: 拜读,有一些困惑望解答
Re: 拜读,有一些困惑望解答
Re: 拜读,有一些困惑望解答
能谈谈thread pool和多核CPU的关系吗? 怎样能保证thread pool的配置,让其能够最大化的压栈多核cpu
biao jiang
Re: 能谈谈thread pool和多核CPU的关系吗? 怎样能保证thread pool的配置,让其能够最大化的压栈多核cpu
Re: 能谈谈thread pool和多核CPU的关系吗? 怎样能保证thread pool的配置,让其能够最大化的压栈多核cpu
Re: 能谈谈thread pool和多核CPU的关系吗? 怎样能保证thread pool的配置,让其能够最大化的压栈多核cpu
使用的一些问题?
Qiao stephen
不知道是不是错误
Re: 使用的一些问题?
vince vince
Re: 不知道是不是错误
昨晚再次阅读了该文,有几个问题需要解答
Re: 昨晚再次阅读了该文,有几个问题需要解答
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
shulin liu
Re: 咨询问题
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一
Yang Lifan
线程池里的线程是如何复用的
Re: 线程池里的线程是如何复用的
Re: 咨询问题
SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一
能不能不要乱写误人子弟!
Re: 能不能不要乱写误人子弟!
taskCount释义有误
有一些疑问,望博主解答
漂泊 漂泊一剑客
请教一下线程销毁的问题
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。在电子工程世界为您找到如下关于“空闲”的新闻
空闲资料下载
/W=1&&RE1=0;&&&&&//A0=0&&&if(RD7==0)&break;&&//为忙状态,则继续等待其为空闲& &#125;&#125;//对液晶显示器发指令子程序(指令保存在TRANS寄存器中)void&TRANS1()&#123...
首次适应算法(First Fit): 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。...
能动态输入构造空闲区表,并哪呢个显示构造好的空闲区表;键盘接收内存申请尺寸大小,分配完后,调整空闲区表,并显示调整后的空闲区表...
[] 2.1 系统工作状态[] 几乎所有的 ARM 处理器设计都有空闲模式。在空闲模式状态下,处理器的时钟停止,以减少处 理器在空闲状态下的功耗。 当嵌入式操作系统发现处理器当前没有可执行的任务时,便 将处理器 置十空闲状态。当系统发生中断时,处理器从空闲状态被唤醒。大多数系统都有操作系统计时器 中断,因此,处理器在一秒钟之内可能几千次地进山空闲状态。[...
TD-SCDMA手机空闲模式小区重选控制,TD-SCDMA手机空闲模式小区重选控制……...
取得频率和时钟的同步。
3. 在小区选择阶段接收包含BCCH数据的脉冲。
4.在某个选定的小区持续接收寻呼信息,在空闲模式下保持频率和时钟锁的同步。
5.在空闲模式下,周期性的接收由第三层软件所要求的服务小区的BCCH数据,同时不能影响寻呼信息的接收。
6. 在空闲模式下检测下行链路信号是否失败,并且向上层报告。
7.在空闲模式和专用通信模式下周期性的测量信号强度...
本系统设计为一种新型的智能电力线载波电话系统。采用了89C51单片微型计算机作控制中心,使整个系统达到智能化。在设计开发初期,为了方便和简单起见,如图一所示,整个系统只设计了八个分机(分机0~7)、一个控制信号传输信道(信道0)和两个语音传输信道(信道1、2)。每个分机相应号码为本分机号。所有分机的控制信号都在一个信道上传输,语音信号则根据情况选择空闲的语音传输信道,后期可适当增加分机和语音传输...
寻呼信息,在空闲模式下保持频率和时钟锁的同步。
5.在空闲模式下,周期性的接收由第三层软件所要求的服务小区的BCCH数据,同时不能影响寻呼信息的接收。
6. 在空闲模式下检测下行链路信号是否失败,并且向上层报告。
7.在空闲模式和专用通信模式下周期性的测量信号强度以及服务质量并且向上层报告。
8.测量信号强度并且尝试接收领近小区的BCCH数据(在空闲模式下),并且周期性的...
位置登记.......... . . . 6-216.2.3 小区选择和重选......... . . . 6-146.2.2 PLMN选择和重选......... . . 6-76.2.1 概述........... . . . 6-56.2 空闲模式下的UE.........6-56.1.2 寻呼流程..........6-36.1.1 UE状态........... 6-16.5.11 用户...
;243.1.9&移动站最大发射功率(MSTXPWR)&253.1.10&跳频状态(HOP)&273.1.11&跳频序列号(HSN)&283.1.12&SDCCH/8信道数(SDCCH)&293.1.13&小区广播信道(CBCH)&313.2&空闲模式&323.2.1&nbsp...
空闲相关帖子
如果一段信号每隔8小时中故障若干次,但故障的位置和次数全都随机。你觉得,这种信号要怎么抓?
  针对空闲时间较长的脉冲信号、高频的串行总线信号、小概率的猝发或毛刺信号,如何做到既可以长时间监控,又可高采样率捕获呢?本文结合测试时长8小时振动试验,捕获小概率失效区信号的案例,对示波器分段存储的应用进行探讨。  一、8小时振荡检测试验  以振动试验的连接器测试为例,整个过程中,监测连接器可能出现次...
),现在配置为空闲状态下3态,SPI模式下SO.
& && && && & GDO2可用作FIFO状态输出,载波感应(CS),时钟输出,配置寄存器为IOCFG0(0X00),现在配置为载波感应(CS)输出.
TXOFF_MODE/RXOFF_MODE:
& &&nbsp...
一张,另一张是由EDMA控制器自动维护的。其中的EDMA维护的这张表是在EDMA工作期间使用的,而用户维护的这张表是在EDMA开始新工作的时候重载的。
& &&&用户在初始化阶段必须先初始化EDMA通道对应的参数表,之后在参数表的后半部分申请一张空闲的参数表,并将其初始化。如文档中1.16.4.3所示的例子,其中62页示例的就是通道对应的参数表,而63页...
; OSTimeDlyHMSM(0,0,0,40,OS_OPT_TIME_HMSM_STRICT,&err);
简单说下吧,硬件平台是stm32F1,软件框架是在ucosIII上添加了一个任务,串口采用的硬件中断接收,再加空闲中断,这样能处理不定长的数据,本来是想采用信号量的,省得麻烦,用USART_RX_STA这个变量的最高位来判断...
用两个NAND或NOR门,可以做出一个置位/复位触发器,或者也可以使用现成的置位/复位触发IC,如74HC279四置位/复位锁存器。这些方法的缺点是,它们需要占用大量的空间来组成触发器。即使你只需要一只触发器,也必须在方案中使用一只大IC封装。不过,如果你有一只空闲的轨至轨运放,也能完成所需要的锁存功能(图1)。  这种方案对空间的需求低,因为轨至轨输入/输出的MCP6022是双运放封装,这...
光纤活动连接器应为蓝色,空闲端口不安装光纤活动连接器。j) 楼道光纤配线箱内光纤的终端、熔接、存储,应在满容量范围内方便地成套配置。j) 光分插片应采用模块化、集成化,楼道分光分纤盒内应无跳接。l) 楼道光纤配线箱厂家应提供所采用分光器的厂家和规格型号,并提供进货证明品悦通信分纤箱工作单元:&#216; 光纤配线箱的工作单元包括光缆固定装置、接地装置、光纤熔接盘片、光纤连接分配装置、光分路器、尾纤...
盒体内,光分路器的性能指标必须符合 招标技术规范书的要求。i) 光分插片使用的光纤活动连接器应为SC型,两个插头任意连接的插入损耗≤0.5dB,回波损耗&35dB,其性能指标应符合 YD,T 5《光纤活动连接器第3部分:SC型》的要求。光分路器上联端口使用的光纤活动连接器应为绿色,下联端口使用的光纤活动连接器应为蓝色,空闲端口不安装光纤活动连接器。j) 楼道光纤配线箱内...
使用的光纤活动连接器应为SC型,两个插头任意连接的插入损耗≤0.5dB,回波损耗&35dB,其性能指标应符合 YD,T 5《光纤活动连接器第3部分:SC型》的要求。光分路器上联端口使用的光纤活动连接器应为绿色,下联端口使用的光纤活动连接器应为蓝色,空闲端口不安装光纤活动连接器。j) 楼道光纤配线箱内光纤的终端、熔接、存储,应在满容量范围内方便地成套配置。j) 光分插片应...
),&TACTL /*设置定时器A的时钟源及工作模式*/MOV #(TBSSEL_2+MC1),&TBCTL /*设置定时器B的时钟源及工作模式*/SetupC0 MOV #OUT,&TBCCTL0 /*通道1发送空闲数据*/MOV #OUT,&TBCCTL1 /*通道2发送空闲数据*/Setupp1_2 MOV.B #00H,&P1DIR /*设置定时器A和定时器...
、SPI_InitStructure.SPI_CPOL主要是设置时钟极性,设置串行同步时钟的空闲状态。这个要根据datasheet的时序图来看,如果SCLK的空闲状态为低电平就设置low;[/color]
[color=#0000ff]
c、你的这个NSS既然设置的是如下:[/color]
[color=#0000ff][mw_shl_code=c,true]SPI_InitStructure.SPI_NSS...
你可能感兴趣的标签
热门资源推荐简介/CPU使用率
一般情况下CPU占了100%的话我们的电脑就会慢下来,而很多时候我们是可以通过做一点点的改动就可以解决,而不必问那些大虾了。CPU使用率当机器慢下来的时候,首先我们想到的当然是任务管理器了,看看到底是哪个程序占了较高的比例,如果是某个大程序那还可以原谅,在关闭该程序后只要CPU正常了那就没问题;如果不是,那你就要看看是什么程序了,当你查不出这个进程是什么的时候就去google或者baidu搜。有时只结束是没用的,在xp下我们可以结合msconfig里的启动项,把一些不用的项给关掉。在2000下可以去下个winpatrol来用。一些常用的软件,比如浏览器占用了很高的CPU,那么就要升级该软件或者干脆用别的同类软件代替,有时软件和系统会有点不兼容导致CPU使用率飙升,这种时候我们可以选择WINDOWS的兼容选项,右键点该.exe文件选兼容性。svchost.exe有时是比较头痛的,当你看到你的某个svchost.exe占用很大CPU时你可以去下个aports或者fport来检察其对应的程序路径,也就是什么东西在调用这个svchost.exe,如果不是c:\Windows\system32(xp)或c:\winnt\system32(2000)下的,那就可疑。升级杀毒软件杀毒吧。右击文件导致100%的CPU占用我们也会遇到,有时点右键停顿可能就是这个问题了。官方的解释:先点左键选中,再右键(不是很理解)。非官方:通过在桌面点右键-属性-外观-效果,取消“为菜单和工具提示使用下列过度效果(U)”来解决。还有某些杀毒软件对文件的监控也会有所影响,可以关闭杀毒软件的文件监控;还有就是对网页,插件,邮件的监控也是同样的道理。一些驱动程序有时也可能出现这样的现象,最好是选择微软认证的或者是官方发布的驱动来装,有时可以适当的升级驱动,不过记得最新的不是最好的。CPU降温软件,由于软件在运行时会利用所以的CPU空闲时间来进行降温,但Windows不能分辨普通的CPU占用和降温软件的降温指令之间的区别,因此CPU始终显示100%,这个就不必担心了,不影响正常的系统运行。在处理较大的word文件时由于word的拼写和语法检察会使得CPU累,只要打开word的工具-选项-拼写和语法把”检察拼写和检察语法“勾去掉。单击avi视频文件后CPU占用率高是因为系统要先扫描该文件,并检察文件所有部分,并建立索引;解决办法:右击保存视频文件的文件夹-属性-常规-高级,去掉为了快速搜索,允许索引服务编制该文件夹的索引的勾。
CPU占用率高原因/CPU使用率
操作系统或杀毒软件的自动更新当操作系统或是杀毒软件在网路上检测到有更新模组时,便自动更新了。此时会占用大量CPU。解决办法:将更新方式由“自动”改为“手动”。不过改变设置后,你要记得时常给系统或杀毒软体更新,否则很容易受到网路攻击。杀毒软件自动杀毒如果你将杀毒软体设为自动杀毒为是定期杀毒,到了杀毒时间它将自动运行杀毒程序。即时也将占用大量CPU。解决办法:将杀毒方式由“自动”或“定时”改为“手动”。不过建议用户还是采用“定时”杀毒。驱动没有经过认证,造成CPU资源占用100%大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。解决办法:建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本,尤其是显卡驱动特别要注意。电脑感染病毒或是木马大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘。经常性更新升级杀毒软体和防火墙,加强防毒意识,掌握正确的防杀毒知识。查看网络连接当安装了Windows XP的电脑做服务器的时候,收到端口445上的连接请求时,它将分配记忆体和少量地调配CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的MaxWorkItems设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。解决办法:我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出:如果电脑有 512MB以上的内存,键入“1024”;如果电脑内存小于512 MB,键入“256”。CPU温度过高当CPU温度过高时,也会使CPU使用率偏高。严重的甚至会自动重启。解决办法:检查CPU风扇是否正常运转,如果坏了或是老化了要进行更换,或是给CPU风扇加点油(要是没有专用油,一般的植物油也行)。运行的程序太多运行的程序太多也会导致CPU使用率高。可以先结束一些暂不用程序解决办法:同时按下CTRL+ALT+DEL键,调出任务管理器,把暂不用的程序都选择“结束任务”。
软件故障/CPU使用率
由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,或者,升级你的硬件配备。
未经认证/CPU使用率
大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。如许多测试软件占用的端口、内存等资源会与其他软件形成冲突,使得CPU无法正确的进行响应;而软件依旧会不停的发出请求,使得CPU的占用很快达到100%。处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。
病毒木马/CPU使用率
大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。
减启动项/CPU使用率
开始;;运行;msconfig;启动,关闭不必要的启动项,重启。通常情况下,修改启动项对启动时间影响比较大,而对CPU使用的情况,也一般只是在开机影响比较大。
察看进程/CPU使用率
svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows 2000中svchost.exe进程的数目为2个,而在Windows XP中svchost.exe进程的数目就上升到了4个及4个以上。为什么启动时CPU使用率那么高?用Msconfig来屏蔽(点开始--运行--输入msconfig--最后一个选项卡里),但注册表还是残留它的,建议用注册表编辑器进入注册表编辑器(点开始—运行—输入regedit—回车) 逐项进入分支:HKEY_LOCAL_MACHINE-Software --Microsoft ---Windows ----CurrentVersion -----Run 看Run里面(右侧窗口里)有没有它,有就删除 另外在HKEY_CURRENT_USER的相同分支下,也有Run,必须也要看看!
网络连接/CPU使用率
当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时,它将分配内存和少量地调配 CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的 MaxWorkItems 设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出:如果计算机有512MB以上的内存,键入“1024”;如果计算机内存小于512 MB,键入“256”。
鼠标右键/CPU使用率
前不久的报到说在资源管理器里面使用鼠标右键会导致CPU资源100%占用,我们来看看是怎么回事?【征兆】:CPU使用率在资源管理器里面,当你右键点击一个目录或一个文件,你将有可能出现下面所列问题:任何文件的拷贝操作在那个时间将有可能停止相应网络连接速度将显着性的降低所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因:当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。【解决方法】:方法一:关闭“为菜单和工具提示使用过渡效果”1、点击“开始”--“控制面板”2、在“控制面板”里面双击“显示”3、在“显示”属性里面点击“外观”标签页4、在“外观”标签页里面点击“效果”5、在“效果”对话框里面,清除“为菜单和工具提示使用过渡效果”前面的复选框接着点击两次“确定”按钮。方法二:在使用鼠标右键点击文件或目录的时候先使用鼠标左键选择你的目标文件或目录。然后再使用鼠标右键弹出快捷菜单。
案例分析/CPU使用率
1、dllhost进程造成CPU使用率占用100%特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。察看任务管理器,可以发现是DLLHOST.EXE消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,奇怪的是,重新启动IIS服务后一切正常,但可能过了一段时间后,问题又再次出现了。【直接原因】:有一个或多个ACCESS数据库在多次读写过程中损坏,微软的MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其它线程只能等待,IIS被死锁了,全部的CPU时间都消耗在DLLHOST中。解决办法:安装“一流信息监控拦截系统”,使用其中的“首席文件检察官IIS健康检察官”软件,启用”察封我号锁模块”,设置:--wblock=yes监控的目录,请指定您的主机的文件所在目录:--wblockdir=d: est监控生成的日志的文件保存位置在安装目录的log目录中,文件名为:logblock.htm停止IIS,再启动“首席文件检察官IIS健康检察官”,再启动IIS,“首席文件检察官IIS健康检察官”会在logblock.htm中记录下最后写入的ACCESS文件的。过了一段时间后,当问题出来时,例如CPU会再次一直处100%的水平,可以停止IIS,检察logblock.htm所记录的最后的十个文件,注意,最有问题的往往是计数器类的ACCESS文件,例如:”**COUNT.MDB”,”**COUNT.ASP”,可以先把最后十个文件或有所怀疑的文件删除到回收站中,再启动IIS,看看问题是否再次出现。我们相信,经过仔细的察找后,您肯定可以找到这个让您操心了一段时间的文件的。找到这个文件后,可以删除它,或下载下来,用ACCESS2000修复它,问题就解决了。2、svchost.exe造成CPU使用率占用100%在win.ini文件中,在[Windows]下面,“run=”和“load=”是可能加载“木马”程序的途径,必须仔细留心它们。一般情况下,它们的等号后面什么都没有,如果发现后面跟有路径与文件名不是你熟悉的启动文件,你的计算机就可能中上“木马”了。当然你也得看清楚,因为好多“木马”,如“AOL Trojan木马”,它把自身伪装成command.exe文件,如果不注意可能不会发现它不是真正的系统启动文件。在system.ini文件中,在[BOOT]下面有个“shell=文件名”。正确的文件名应该是“explorer.exe”,如果不是“explorer.exe”,而是“shell= explorer.exe 程序名”,那么后面跟着的那个程序就是“木马”程序,就是说你已经中“木马”了。CPU使用率在注册表中的情况最复杂,通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”目录下,察看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关,如“Acid Battery v1.0木马”,它将注册表“HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”下的Explorer 键值改为Explorer=“C:Windowsexpiorer.exe”,“木马”程序与真正的Explorer之间只有“i”与“l”的差别。当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY-CURRENT-USERSoftwareMicrosoftWindowsCurrentVersionRun”、“HKEY-USERS****SoftwareMicrosoftWindowsCurrentVersionRun”的目录下都有可能,最好的办法就是在“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”下找到“木马该病毒也称为“Code Red II(红色代码2)”病毒,与早先在西方英文系统下流行“红色代码”病毒有点相反,在国际上被称为VirtualRoot(虚拟目录)病毒。该蠕虫病毒利用Microsoft已知的溢出漏洞,通过80端口来传播到其它的Web页服务器上。受感染的机器可由黑客们通过Http Get的请求运行scripts/root.exe来获得对受感染机器的完全控制权。当感染一台服务器成功了以后,如果受感染的机器是中文的系统后,该程序会休眠2天,别的机器休眠1天。当休眠的时间到了以后,该蠕虫程序会使得机器重新启动。该蠕虫也会检察机器的月份是否是10月或者年份是否是2002年,如果是,受感染的服务器也会重新启动。当Windows NT系统启动时,NT系统会自动搜索C盘根目录下的文件explorer.exe,受该网络蠕虫程序感染的服务器上的文件explorer.exe也就是该网络蠕虫程序本身。该文件的大小是8192字节,VirtualRoot网络蠕虫程序就是通过该程序来执行的。同时,VirtualRoot网络蠕虫程序还将cmd.exe的文件从Windows NT的system目录拷贝到别的目录,给黑客的入侵敞开了大门。它还会修改系统的注册表项目,通过该注册表项目的修改,该蠕虫程序可以建立虚拟的目录C或者D,病毒名由此而来。值得一提的是,该网络蠕虫程序除了文件explorer.exe外,其余的操作不是基于文件的,而是直接在内存中来进行感染、传播的,这就给捕捉带来了较大难度。我们先看看微软是怎样描述svchost.exe的。在微软知识库314056中对svchost.exe有如下描述:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。其实svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows 2000中svchost.exe进程的数目为2个,而在Windows XP中svchost.exe进程的数目就上升到了4个及4个以上。所以看到系统的进程列表中有几个svchost.exe不用那么担心。svchost.exe到底是做什么用的呢?首先我们要了解一点那就是Windows系统的中的进程分为:独立进程和共享进程这两种。由于Windows系统中的服务越来越多,为了节约有限的系统资源微软把很多的系统服务做成了共享模式。那svchost.exe在这中间是担任怎样一个角色呢?svchost.exe的工作就是作为这些服务的宿主,即由svchost.exe来启动这些服务。svchost.exe只是负责为这些服务提供启动的条件,其自身并不能实现任何服务的功能,也不能为用户提供任何服务。svchost.exe通过为这些系统服务调用动态链接库(DLL)的方式来启动系统服务。svchost.exe是病毒这种说法是任何产生的呢?因为svchost.exe可以作为服务的宿主来启动服务,所以病毒、木马的编写者也挖空心思的要利用svchost.exe的这个特性来迷惑用户达到入侵、破坏计算机的目的。如何才能辨别哪些是正常的svchost.exe进程,而哪些是病毒进程呢?svchost.exe的键值是在“HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionSvchost”,如图1所示。图1中每个键值表示一个独立的svchost.exe组。微软还为我们提供了一种察看系统正在运行在svchost.exe列表中的服务的方法。以Windows XP为例:在“运行”中输入:cmd,然后在命令行模式中输入:tasklist /svc。系统列出如图2所示的服务列表。图2中红框包围起来的区域就是svchost.exe启动的服务列表。如果使用的是Windows 2000系统则把前面的“tasklist /svc”命令替换为:“tlist -s”即可。如果你怀疑计算机有可能被病毒感染,svchost.exe的服务出现异常的话通过搜索svchost.exe文件就可以发现异常情况。一般只会找到一个在:“C:WindowsSystem32”目录下的svchost.exe程序。如果你在其它目录下发现svchost.exe程序的话,那很可能就是中毒了。还有一种确认svchost.exe是否中毒的方法是在任务管理器中察看进程的执行路径。但是由于在Windows系统自带的任务管理器不能察看进程路径,所以要使用第三方的进程察看工具。上面简单的介绍了svchost.exe进程的相关情况。总而言之,svchost.exe是一个系统的核心进程,并不是病毒进程。但由于svchost.exe进程的特殊性,所以病毒也会千方百计的入侵svchost.exe。通过察看svchost.exe进程的执行路径可以确认是否中毒。3、Services.exe造成CPU使用率占用100%【症状】在基于 Windows 2000 的计算机上,Services.exe 中的 CPU 使用率可能间歇性地达到100 %,并且计算机可能停止响应(挂起)。出现此问题时,连接到该计算机(如果它是文件服务器或域控制器)的用户会被断开连接。您可能还需要重新启动计算机。如果 Esent.dll 错误地处理将文件刷新到磁盘的方式,则会出现此症状。【解决方案】Service Pack 信息要解决此问题,请获取最新的 Microsoft Windows 2000 Service Pack。有关其它信息,请单击下面的文章编号,以察看 Microsoft 知识库中相应的文章:260910 如何获取最新的 Windows 2000 Service Pack【修复程序信息】Microsoft 提供了受支持的修补程序,但该程序只是为了解决本文所介绍的问题。只有计算机遇到本文提到的特定问题时才可应用此修补程序。此修补程序可能还会接受其它一些测试。因此,如果这个问题没有对您造成严重的影响,Microsoft 建议您等待包含此修补程序的下一个 Windows 2000 Service Pack。要立即解决此问题,请与“Microsoft 产品支持服务”联系,以获取此修补程序。有关“Microsoft 产品支持服务”电话号码和支持费用信息的完整列表,请访问 Microsoft Web 站点:注意 :特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新程序能够解决您的问题,可免收通常情况下收取的电话支持服务费用。对于特定更新程序无法解决的其它支持问题和事项,将正常收取支持费用。下表列出了此修补程序的全球版本的文件属性(或更新的属性)。这些文件的日期和时间按协调通用时间 (UTC) 列出。察看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中的“日期和时间”工具中的 时区 选项卡。【状态】Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。此问题最初是在 Microsoft Windows 2000 Service Pack 4 中更正的。4、windows search.exe造成cpu高占用率。【症状】在平常使用突然无症状的cpu占用率居高不下或瞬间占用率很高,造成电脑卡顿。【解决方案】Windows Search 可以即时搜索整台电脑,查找和查看文档、电子邮件、音乐、照片、视频等各种内容。平时不爱在电脑上收索的人可以去服务里面把Windows search服务将次服务禁用,注意是在启动类型里禁用,不然下次开机又会重新启用。如果你实在平时实在很少收索文件,那你也可以将次程序删除。
&|&相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。
此词条还可添加&
编辑次数:10次
参与编辑人数:8位
最近更新时间: 05:42:30
贡献光荣榜

我要回帖

更多关于 空闲让进 忙则等待 的文章

 

随机推荐