CPU使用老是100% 进程里services.exe 占用CPU非常大, 是怎么回事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU使用老是100% 进程里services.exe 占用CPU非常大, 是怎么回事相关的知识,希望对你有一定的参考价值。
不知道是不是中毒了的原因。 而且最近老是有网页游戏广告弹出来。 因此我自己从新装了两次系统,还是解决不了。 我还把D盘格式化了 还是不行。 CPU开机之后不使用任何程序都会飙升到100% 。 导致电脑非常卡。 主要就是services.exe 进程非常之大。 到底是为什么? 怎么办???谁能帮我解决一下、我重装了系统还是老样子。、
1、木马与病毒:有很多的蠕虫病毒在电脑内部快速繁殖,就会造成了占用过高上升了。这种问题,先要想到就是杀毒软件了。
正常要在安全模式下来杀毒了,因为这样查杀比较彻底。而且杀毒软件要常更新,这样才能保证杀毒的效果更新病毒。
2、大型游戏或程序:有时候运行率高是一些大型程序导致的,比如占内存高的大型游戏。
正常原因有两种:
第一种是编写的程序不符合导致运行率飚高。这种情况比较不常见,因为正常的游戏都是测试过的。
第二种是电脑的配置跟不上了,没有解决方法,要么这游戏不玩了,要么提升下电脑配置了。
3、磁盘碎片:有时候经会对电脑的软件安装或者卸载,当文件在安装和卸载的时候,会使硬盘中的数据排列非常分散或者断断续续的,让电脑在查找时速度变慢,就造成大量的使用CPU。
所以要常把系统的垃圾清理掉,清理之后要对磁盘碎片进行整理。
扩展资料:
电脑常见故障检修:
故障现象:笔记本电脑指示灯闪烁而无法正常开机
1、过量使用笔记本或长时间待机电池用电过量形成笔记本电源电量不足,建议使用前多充电就可以解决这个问题。
2、硬件松动或笔记本进水形成开机没有任何反映。如果是硬件松动打开笔记本对松动硬件重新进行插入即可;硬件损坏造成则需要用专业仪器进行检测后对损坏硬件进行更换。
3、硬件松动或者COMS数据同错造成开机时提示无法识别串口、并口、硬盘等,需要通过重新插拔插松动硬件和恢复COMS数据排除故障。
4、电脑报警无法进入系统。凡是在电脑启动时发出“笛.”“笛”的报警声,都是由于硬件出错或损坏造成的。这类故障就要针对报警声的不同,对硬件进行维修。
5、操作系统问引起的无法启动。这类问题总是反映在硬件检测完成后系统启动时出错或重新起动,解决的办法是对系统进行恢复或重新安装系统。
参考技术A 你可能是中了Worm.NetSky.B木马了。对于Windows NT/2000/XP/2003系统:
1、先使用进程序管理器结束病毒进程“services.exe"。
2、查找并删除病毒,进入系统目录程序(Winnt\system32或Windows\system32)。找到文件"services.exe“将其删除。
3、清除病毒在注册表里添加的项,打开注册表编辑器,在左边的画板中找到HKEY_LOCAL_MACHNE>Software>Microsoft>Windows>Current>Run。
在右边画板中找到并删除“service" =%Windir%\services.exe -serv”。关闭注册表编辑器。
完成以上操作后,重启计算机后,病毒就被清除干净了 参考技术B 九个可能
防病毒软件故障引起的CPU利用率
由于新版的KV,金山,瑞星加入一个随机的网页,插件,邮件监控系统无疑会增加负担。方法:基本上没有合理的方式使用最少的监控服务,升级你的硬件配备。
驱动没有经过认证,造成CPU使用率100%
大量的测试版的驱动在网上泛滥,造成一个难以发现的故障原因。方法:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并严格核对型号,版本。
病毒,木马造成
快速复制大量的蠕虫病毒在系统内部,造成CPU资源利用率,根据高。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,防毒意识,掌握正确的防杀毒知识。
控制面板 - 管理工具 - 服务 - 瑞星实时监控服务点鼠标右键,而不是手动。
开始 - >运行 - >输入msconfig->启动,关闭不必要的启动项,重启。
查看svchost进程。
svchost.exe是Windows XP系统的一个核心进程。 svchost.exe不单单只在Windows XP中,使用NT内核的Windows系统中都会有svchost.exe的存在。数一般在Windows 2000中svchost.exe进程2,在Windows XP中svchost.exe进程的数目上升到超过4 4。
查看网络连接。卡上。
查看网络连接
当您安装Windows XP的计算机服务器,接收端口445上的连接请求时,它将分配内存和少量的CPU资源部署这些连接服务。当负荷过重的时候,CPU占用率可能过高,这是因为工作项的数目和响应能力之间存在固有的权衡。你要确定合适的MaxWorkItems设置以提高系统响应。如果该值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。
要解决这个问题,我们可以通过注册表来解决:在注册表编辑器,依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver]分支,在右侧窗口中新的“MaxWorkItems的”DWORD值。然后双击该值在打开的窗口中,键入下列值?并保存退出:
看看是不是Windows XP使用鼠标右键会导致CPU使用率100%
在资源管理器里面,当你右键点击一个目录或文件,你可能会出现以下所列:
任何文件复制操作将有可能在那个时候停止
相应的网络连接速度将显着降低
流输入/输出操作,如使用Windows Media Player听音乐将有可能是音乐失真成因:
当你内部的资源管理器中,用鼠标右键点击一个文件或目录时,显示快捷菜单中,CPU占用率将增加了100%,当你关闭快捷菜单的时候才返回正常水平。
解决方案:
方法:关闭“使用过渡效果为菜单和工具提示”
1,点击“开始” - “控制面板”
,里面的“控制面板“,然后双击”显示“
里面点击”显示属性“外观”选项卡
里面的“外观”选项卡,单击“效果”
5,里面的“效果“对话框,清除”使用过渡效果的菜单和工具提示“复选框,然后单击两次”确定“按钮。
2:右键单击的文件或目录,使用鼠标左键选择目标文件或目录,然后使用鼠标右键调出快捷菜单。
通用CPU占100%,那么电脑会总会慢下来,很多时候,我们可以做一点点的变化可以解决,而不必问那些大虾。
当机器慢下来的时候,我们首先想到的当然是任务管理器中看到哪个程序占了业务中的比重,如果它是一个大的程序,可以被原谅,关闭该程序后只要作为CPU的正常,没有问题,如果不是,那么你有看什么的那个节目,当你可以不找的过程是什幺去谷歌或百度搜索。有时只结束是没用的,在xp中输入msconfig启动项,我们可以结合一些项目不被关闭,2000年可以去下一个WinPatrol的使用。
常用软件,如浏览器,很搞在CPU,NA是必要的软件升级或者干脆更换其他同类软件,软件和系统,有时会有点不兼容,当然我们可以试下xp系统兼容,右exe文件的兼容性。
svchost.exe的,有时头痛,你可以去检查相应的程序路径,也就是,当你看到你的一个svchost.exe的占用太多的CPU想出来的东西这个svchost.exe,如果到下个aports的Fport不是c:windowssystem32下(XP)或c:winntsystem32下(2000年)下可疑升级杀毒软件杀毒。
右键单击该文件,导致CPU使用率100%,我们会遇到,有时右键单击停止可能是问题官方的解释:先点左键单击,然后右键(不是很理解)。非官方:在桌面上单击右键 - 属性 - 外观 - 效果,取消“提示为菜单和工具使用以下过渡效果(U)来解决。有一些杀毒软件的文件监控会也有一定影响,文档控制可以关闭杀毒软件,是一个网页,插件,邮件的监控也是同样的道理。
驱动程序可能有时会出现这样的现象,最好是安装微软认证的或由官方发布的驱动程序,有时可以适当的升级驱动,不过记得最新的不是最好的。
CPU降温软件,该软件会在运行时使用,所以的CPU空闲时间来降温,但Windows不能分辨普通的CPU使用率和冷却降温软件指令时,CPU总是100%之间的区别,不必不用担心,不会影响系统正常运行。
处理较大的word文档,单词的拼写和语法检查会使得CPU累,只要打开工具 - 选项 - 拼写和语法“检查拼写和检查语法勾去掉。
单击avi视频文件CPU使用率很高,因为系统必须先扫描该文件,并检查所有部件和索引;解决办法:右击保存视频文件的文件夹 - 属性 - 常规 - 高级删除快速搜索,允许索引服务编制索引此文件夹钩
CPU占用100%的情况下,分析
DLLHost进程造成CPU使用率占用100%
特征:服务器正常CPU消耗应该是在75%以下,而且CPU消耗应该是向上和向下的,这个问题的服务器,CPU会突然一直在100%的水平,不会下降。查看任务管理器,可以发现DLLHOST.EXE消耗所有的CPU空闲时间管理员在这种情况下,必须重新启动IIS服务,奇怪的是,一切都正常后,重新启动IIS服务,但过了一段一段时间后,问题再次出现,直接原因:
一个或多个接入在多个数据库损坏读写Microsoft MDAC受损的ACCESS文件写入,ASP线程块结果其它线程只能等待,IIS是锁,所有消耗的CPU时间在Dllhost。
解决方案
安装一流信息监控拦截系统,使用一个行政文件检察官IIS健康检查官软件,
启用“扣押我的号码锁模块,集:<BR /
- =是WBLOCK
监控的目录,指定您的主机文件目录:
- wblockdir = D:EST
了
>监控生成的日志文件位置保存的日志目录的安装目录下,文件名:logblock.htm
停止IIS,重新启动“首席文件检察官IIS健康检查官”,再启动IIS,行政文件检查官IIS健康检查官logblock.htm最后书面记录访问文件。
一段时间后,出现问题时,如CPU再次在100%的水平,可以停止IIS的检查logblock.htm记录的最后的十个文件,注意往往适得其反访问文件的例子:“** COUNT.MDB”,“的** count.asp,在前十个文件或有怀疑回收站删除的文件,然后启动IIS,看看问题是否再次发生,我们相信,仔细查找后,您肯定可以找到这个文件,让你担心了一段时间。
找到这个文件,你可以删除它,或下载,修复它ACCESS2000,问题就解决了。将使用100%
svchost.exe的原因CPU使用率
在win.ini文件中,在[WINDOWS]下面,“运行=”和“负载=”是一个的方式来加载“木马”程序,您必须仔细注意他们。正常情况下,等号后什幺不遵守的路径和文件名不是你熟悉的启动文件,你的电脑可能会在上“特洛伊木马”,当然,你必须去看看,因为有很多的“木马”,如AOL木马木马,自身伪装成COMMAND.EXE的文件,如果不注意可能不会发现它是不是真正的系统启动文件。
在SYSTEM.INI文件,在[BOOT]下面的“壳=文件名。正确的文件名是“的explorer.exe”,如果不是“explorer.exe的”,但“壳= Explorer.exe程序名,NA,程序就是”木马“程序,你有”木马马“。
在注册表中是最复杂,通过regedit命令打开注册表编辑器,点击查看键值:HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun目录不熟悉的自动启动文件,扩展名为EXE,紧介意在这里:一些“木马”程序生成的文件,如系统文件,想蒙混过关,如“铅酸电池1.0木马伪装,将注册表中的”HKEY-LOCAL MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun的改变总管= C:Windowsexpiorer.exe “,”木马“程序的Explorer之间只有”i“和”l“的差别”下的资源管理器键,当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY电流USERSoftwareMicrosoftWindowsCurrentVersionRun“,”HKEY-USERS **** SoftwareMicrosoftWindowsCurrentVersionRun“目录是可能的,最好的办法就是在”HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun“下找到”木马该病毒也被称为“红色代码II(红色代码)“病毒,以前流行在西方英文系统”红色代码“病毒有点相反,被称为VirtualRoot(虚拟目录)病毒,蠕虫与Microsoft已知的溢出漏洞,通过80端口来传播到其他Web页面服务器。受感染的计算机被黑客通过HTTP的GET请求运行脚本/称为root.exe得到受感染机器的完全控制权。
感染服务器的成功时,如果受感染的机器是中国的制度,程序将睡2天,其他机器休眠1天,当蠕虫,使睡眠时间机器重新启动。蠕虫也会检查机器的月份是否是10个月或一年是2002年,如果被感染的服务器将重新启动。 Windows NT系统启动时,NT系统会自动搜索C盘根目录下的explorer.exe文件在服务器上的网络蠕虫感染的explorer.exe文件,网络蠕虫本身的文件大小为8192字节的蠕虫VirtualRoot网络,通过程序执行。 cmd.exe文件蠕虫VirtualRoot网络也将可以从Windows NT系统目录拷贝到别的目录,黑客敞开了大门,同时会系统的注册表项,注册表,的蠕虫可以创建一个虚拟的目录C或者D病毒名称是值得一提的是网络蠕虫文件explorer.exe的此外,其余的操作不是基于文件的,而是直接在内存中感染,蔓延其中捕捉到更大程度的难度。
“程序的文件名,然后你可以在整个注册表中搜索。
我们来看看微软是如何描述svchost.exe的Svchost.exe的如下面的在Microsoft知识库文章314056: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的NA不必担心系统的进程列表。
svchost.exe的到底是什么做的? BR p>首先,我们要了解一点那就是在Windows系统的过程中又分为:独立进程和共享进程两种。越来越多的服务,在Windows系统中,为了节约有限的系统资源,微软已经做了很多系统服务共享模式。那svchost.exe的中间什么样的角色?
svchost.exe的工作这些服务的主机,,交由svchost.exe来启动这些服务。svchost.exe是开始的条件下,其自身的功能,并不能达到任何服务负责为这些服务,也不为用户提供任何服务。svchost.exe的服务调用动态链接库(DLL),这些系统来启动系统服务。
svchost.exe是病毒这种说法是产生它?
BR />因为svchost.exe的可以作为服务的宿主来启动服务,所以病毒,木马的编写者利用这一功能的svchost.exe机架他们的大脑来迷惑用户的入侵,破坏的目的的计算机
我怎样才能知道这是正常的svchost.exe进程,哪些是病毒进程呢?
svchost.exe的的关键在HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionSvchost的“图1所示。图1中,每个键表示一个独立的Svchost.exe组。
微软还为我们提供了在系统正在运行在svchost.exe的服务列表中看看。 Windows XP中,例如:运行,输入CMD,然后在命令行模式,输入:任务列表/ SVC。系统提出了如图2所示的服务列表。该地区周围的红色方块图2中的svchost.exe启动的服务列表。如果您使用的是Windows 2000系统放在前面的“任务列表/ SVC”命令替换:键入tlist-S“可以。如果你怀疑计算机有可能被病毒感染,Svchost.exe的服务出现异常情况,可以发现异常通过搜索svchost.exe文件,一般只会找到一个svchost.exe进程中的:“C的:windowssystem32下”目录。如果您发现了其他目录中的svchost.exe进程,很可能是中毒了。
BR />还有一个看看在这个过程中确认是否中毒。然而,由于与Windows任务管理器系统自带的svchost.exe进程路径不能看在任务管理器的执行路径,所以要使用第三方的进程察看工具。
以上的svchost.exe进程。总而言之,Svchost.exe是一个系统的核心进程,并不是病毒进程。然而,由于特殊的性质svchost.exe进程,使该病毒会千方百计的入侵Svchost.exe的了解有关svchost.exe进程的执行路径可以确认是否中毒。
3,Services.exe的原因CPU使用率100 %占用症状
在基于Windows 2000的计算机,Services.exe中的CPU使用率可能达到100%,并且计算机可能停止响应(挂起)间歇。当此出现问题时,连接到电脑(如果它是一个文件服务器或域控制器),用户将被断开。您可能还需要重新启动计算机。发生此症状如果Esent.dll错误处理文件被刷新到磁盘,。解决方案
服务包信息
要解决此问题,请获取最新的Microsoft Windows 2000的Service Pack。有关其他信息,请单击下面的文章的文章编号,以查看Microsoft知识库中相应的文章:
260910如何获取最新的Windows 2000服务包
修复信息
微软支持的修补程序,但它只是为了解决本文介绍了应用此修复程序只有系统遇到这一特定问题。此修补程序可能会接受其他一些测试,因此,如果问题不严重影响,Microsoft建议您等待包含此修补程序的下一个Windows 2000服务包。
Microsoft产品支持服务的完整列表,要立即解决此问题,请与Microsoft产品支持服务“联系,以获取此修复程序。电话号码和关于支持费用的信息,请访问Microsoft Web站点:
注:在特殊情况下,如果Microsoft支持专业人员确定某个特定的更新程序能够解决您的问题,电话支持服务费用通常可豁免费用。其他支持问题和难以解决的问题,可以为特定的更新将正常收取支持费用。
将使用正常的软件造成的CPU使用率100%
首先,开机后出现这种情况,直至关机。NA的原因可能是降落在同一时间与系统软件之一。运行输入“输入msconfig”打开“系统配置实用工具,去到”开始“标签。然后,依次取消可疑选项前面的勾,然后重新启动计算机。反复测试软件,直到找到故障原因。或者通过一些优化软件如“优化大师”用于此目的。另:如果键盘键被卡住,也可以导致上面提到的引导问题。
如果您正在使用的计算机上,这些问题的出路,带来了任务管理器(WINXP的CTRL + ALT + DEL WIN2000 CTRL + SHIFT ESC),“进程”选项卡,请参阅“CPU”栏,从里面找到资源计划(系统空闲进程是正常的一部分,它的价值是一般的RB淖线和一顿柠檬道歉寡妇敲鼻澳大利亚不安捎美泉瀑资源,所以它是越高越好)通过搜索功能找到这个进程属于该软件。然后就可以升级,关闭,卸载软件,或仅仅是为了找到一个类似的软件来代替,就可以解决问题。
5,所造成的病毒,木马,间谍软件所占用的CPU使用率100%
CPU占用率100%的故障发生往往是因为病毒木马,比如震荡波病毒。应该首先更新病毒库,电脑整机的扫描。然后,在使用反间谍软件Ad - Aware的,检查是否存在间谍软件。论坛,我的很多朋友都遇到过svchost.exe的CPU占用100%,这往往是中毒的表现。
svchost.exe的动态链接库(DLL)的形式,其中一些意志指向svchost.exe的可执行程序,它调用的动态链接库,加上相应的参数来实现Windows系统启动该服务。正是因为它的特殊性和重要性,使它更容易成为木马病毒主机。
explorer.exe进程造成CPU使用率占用100%
在SYSTEM.INI文件中,在[BOOT]个“shell =文件名,正确的文件名是”的explorer.exe“,如果不是”explorer.exe的“,是”空壳= Explorer.exe程序名,NA,后跟程序就是“木马”程序,你一直在“特洛伊木马”。
最复杂的注册表regedit命令打开注册表编辑器,在点击至:HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun目录,查看的关键是有没有不熟悉的自动启动文件,扩展名为EXE,这里切记: “木马程序生成的文件,如系统文件,并希望”铅酸电池V1.0木马“,如通过伪装蒙混过关,将
资源管理器键在注册表”HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun“值总管= C:Windowsexpiorer.exe“,”木马“程序的Explorer之间只有”i“和”l“的差别,当然在注册表中还有很多地方都可以隐藏”木马“程序,例如:下HKEY CURRENTUSERSoftwareMicrosoftWindowsCurrentVersionRun“,”HKEYUSERS **** SoftwareMicrosoftWindowsCurrentVersionRun目录。可能,最好的办法是根据“HKEYLOCALMACHINESoftwareMicrosoftWindowsCurrentVersionRun”,“木马”程序的文件名,再在整个注册表中搜索即可
导致CPU使用率占用100%
此类故障常见的原因是使用具有超线程的P4 CPU超线程,我找的一些信息是没有明确的理由说明。据一些用户总结超线程似乎天网防火墙有冲突,你可以卸载天网并安装其他防火墙解决方案,也可以关闭超线程在BIOS解决
8 AVI视频文件造成CPU使用率将使用100%
系统假的现象,在Windows XP中,单击一个大的AVI视频文件,可能造成exploere.exe过程中利用率达100%,这是因为系统的扫描文件,并检查所有部件索引大文件需要很长的时间和CPU使用率达到100%。解决办法:右击保存视频文件的文件夹,选择“属性 - >常规 - >高级,去掉”为了快速搜索,允许索引服务编制索引此文件夹“复选框前面的勾
9,防病毒软件的CPU使用率占用100%
杀毒软件一般加入,网页,邮件,实时监测个人隐私的空函数,这无疑会增加系统的负担,如:玩游戏很慢,关闭杀毒软件的解决方案是最直接的方式。
10,处理大型Word文档高CPU使用率
一般会造成电脑假,这些都是造成因为Word的拼写和语法检查程序,以打开WORD“工具 - 选项”进入“拼写和语法”选项卡“类型检查的拼写”和“检查语法为你键入”两个复选框前面的勾也被删除。 11,网络连接导致CPU使用率占用100%
当你作为一个服务器Windows2000/XP的,您收到445端口的连接请求时,系统将分配内存和少量的CPU资源,这些连接服务,超载时,它就会出现。为了解决这个问题是可以解决的,通过注册表,打开注册表,找到HKEY-LOCAL MACHNESYSTEMCurrentControlSetServiceslanmanserver的的权利称为“MaxWorkItems的”创建一个新的DWORD值然后双击单击该值,如果你的计算机有512或更多的内存,它被设置为“1024”,如果是小于512,它被设置为256。
一些不完善的驱动程序也可以造成CPU使用率过高
经常使用待机功能,也会造成系统自动关闭硬盘的DMA模式。这将不仅使系统性能下降明显,系统启动慢,但也使系统在运行一些大型软件和游戏时CPU使用率是100%,导致停止
进程占用CPU 100%时,病毒可能
系统空闲进程
进程文件:[系统进程]或[系统进程]
进程名称:Windows内存为系统进程
说明:WINDOWS页内存管理进程,拥有0优先。
介绍,作为一个单一的线程中运行在每个处理器上的过程,该系统是不处理其他线程的CPU利用率的处理器时间的分布的较大的可用于分配更多的CPU资源,数字越小的CPU资源约束。 。
Spoolsv.exe中
进程文件:spoolsv或spoolsv.exe的准备
进程名称:打印机后台程序服务
描述:Windows打印任务控制程序的打印机介绍:缓冲(spooler)中是管理缓冲池中的打印和传真作业
的Spoolsv.exe→打印任务控制程序,一般会被加载打印前的准备? 参考技术C 九个可能
防病毒软件故障引起的CPU利用率
由于新版的KV,金山,瑞星加入一个随机的网页,插件,邮件监控系统无疑会增加负担。方法:基本上没有合理的方式使用最少的监控服务,升级你的硬件配备。
驱动没有经过认证,造成CPU使用率100%
大量的测试版的驱动在网上泛滥,造成一个难以发现的故障原因。方法:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并严格核对型号,版本。
病毒,木马造成
快速复制大量的蠕虫病毒在系统内部,造成CPU资源利用率,根据高。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,防毒意识,掌握正确的防杀毒知识。
控制面板 - 管理工具 - 服务 - 瑞星实时监控服务点鼠标右键,而不是手动。
开始 - >运行 - >输入msconfig->启动,关闭不必要的启动项,重启。
查看svchost进程。
svchost.exe是Windows XP系统的一个核心进程。 svchost.exe不单单只在Windows XP中,使用NT内核的Windows系统中都会有svchost.exe的存在。数一般在Windows 2000中svchost.exe进程2,在Windows XP中svchost.exe进程的数目上升到超过4 4。
查看网络连接。卡上。
查看网络连接
当您安装Windows XP的计算机服务器,接收端口445上的连接请求时,它将分配内存和少量的CPU资源部署这些连接服务。当负荷过重的时候,CPU占用率可能过高,这是因为工作项的数目和响应能力之间存在固有的权衡。你要确定合适的MaxWorkItems设置以提高系统响应。如果该值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。
要解决这个问题,我们可以通过注册表来解决:在注册表编辑器,依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver]分支,在右侧窗口中新的“MaxWorkItems的”DWORD值。然后双击该值在打开的窗口中,键入下列值?并保存退出:
看看是不是Windows XP使用鼠标右键会导致CPU使用率100%
在资源管理器里面,当你右键点击一个目录或文件,你可能会出现以下所列:
任何文件复制操作将有可能在那个时候停止
相应的网络连接速度将显着降低
流输入/输出操作,如使用Windows Media Player听音乐将有可能是音乐失真成因:
当你内部的资源管理器中,用鼠标右键点击一个文件或目录时,显示快捷菜单中,CPU占用率将增加了100%,当你关闭快捷菜单的时候才返回正常水平。
解决方案:
方法:关闭“使用过渡效果为菜单和工具提示”
1,点击“开始” - “控制面板”
,里面的“控制面板“,然后双击”显示“
里面点击”显示属性“外观”选项卡
里面的“外观”选项卡,单击“效果”
5,里面的“效果“对话框,清除”使用过渡效果的菜单和工具提示“复选框,然后单击两次”确定“按钮。
2:右键单击的文件或目录,使用鼠标左键选择目标文件或目录,然后使用鼠标右键调出快捷菜单。
通用CPU占100%,那么电脑会总会慢下来,很多时候,我们可以做一点点的变化可以解决,而不必问那些大虾。
当机器慢下来的时候,我们首先想到的当然是任务管理器中看到哪个程序占了业务中的比重,如果它是一个大的程序,可以被原谅,关闭该程序后只要作为CPU的正常,没有问题,如果不是,那么你有看什么的那个节目,当你可以不找的过程是什幺去谷歌或百度搜索。有时只结束是没用的,在xp中输入msconfig启动项,我们可以结合一些项目不被关闭,2000年可以去下一个WinPatrol的使用。
常用软件,如浏览器,很搞在CPU,NA是必要的软件升级或者干脆更换其他同类软件,软件和系统,有时会有点不兼容,当然我们可以试下xp系统兼容,右exe文件的兼容性。
svchost.exe的,有时头痛,你可以去检查相应的程序路径,也就是,当你看到你的一个svchost.exe的占用太多的CPU想出来的东西这个svchost.exe,如果到下个aports的Fport不是c:windowssystem32下(XP)或c:winntsystem32下(2000年)下可疑升级杀毒软件杀毒。
右键单击该文件,导致CPU使用率100%,我们会遇到,有时右键单击停止可能是问题官方的解释:先点左键单击,然后右键(不是很理解)。非官方:在桌面上单击右键 - 属性 - 外观 - 效果,取消“提示为菜单和工具使用以下过渡效果(U)来解决。有一些杀毒软件的文件监控会也有一定影响,文档控制可以关闭杀毒软件,是一个网页,插件,邮件的监控也是同样的道理。
驱动程序可能有时会出现这样的现象,最好是安装微软认证的或由官方发布的驱动程序,有时可以适当的升级驱动,不过记得最新的不是最好的。
CPU降温软件,该软件会在运行时使用,所以的CPU空闲时间来降温,但Windows不能分辨普通的CPU使用率和冷却降温软件指令时,CPU总是100%之间的区别,不必不用担心,不会影响系统正常运行。
处理较大的word文档,单词的拼写和语法检查会使得CPU累,只要打开工具 - 选项 - 拼写和语法“检查拼写和检查语法勾去掉。
单击avi视频文件CPU使用率很高,因为系统必须先扫描该文件,并检查所有部件和索引;解决办法:右击保存视频文件的文件夹 - 属性 - 常规 - 高级删除快速搜索,允许索引服务编制索引此文件夹钩
CPU占用100%的情况下,分析
DLLHost进程造成CPU使用率占用100%
特征:服务器正常CPU消耗应该是在75%以下,而且CPU消耗应该是向上和向下的,这个问题的服务器,CPU会突然一直在100%的水平,不会下降。查看任务管理器,可以发现DLLHOST.EXE消耗所有的CPU空闲时间管理员在这种情况下,必须重新启动IIS服务,奇怪的是,一切都正常后,重新启动IIS服务,但过了一段一段时间后,问题再次出现,直接原因:
一个或多个接入在多个数据库损坏读写Microsoft MDAC受损的ACCESS文件写入,ASP线程块结果其它线程只能等待,IIS是锁,所有消耗的CPU时间在Dllhost。
解决方案
安装一流信息监控拦截系统,使用一个行政文件检察官IIS健康检查官软件,
启用“扣押我的号码锁模块,集:<BR /
- =是WBLOCK
监控的目录,指定您的主机文件目录:
- wblockdir = D:EST
了
>监控生成的日志文件位置保存的日志目录的安装目录下,文件名:logblock.htm
停止IIS,重新启动“首席文件检察官IIS健康检查官”,再启动IIS,行政文件检查官IIS健康检查官logblock.htm最后书面记录访问文件。
一段时间后,出现问题时,如CPU再次在100%的水平,可以停止IIS的检查logblock.htm记录的最后的十个文件,注意往往适得其反访问文件的例子:“** COUNT.MDB”,“的** count.asp,在前十个文件或有怀疑回收站删除的文件,然后启动IIS,看看问题是否再次发生,我们相信,仔细查找后,您肯定可以找到这个文件,让你担心了一段时间。
找到这个文件,你可以删除它,或下载,修复它ACCESS2000,问题就解决了。将使用100%
svchost.exe的原因CPU使用率
在win.ini文件中,在[WINDOWS]下面,“运行=”和“负载=”是一个的方式来加载“木马”程序,您必须仔细注意他们。正常情况下,等号后什幺不遵守的路径和文件名不是你熟悉的启动文件,你的电脑可能会在上“特洛伊木马”,当然,你必须去看看,因为有很多的“木马”,如AOL木马木马,自身伪装成COMMAND.EXE的文件,如果不注意可能不会发现它是不是真正的系统启动文件。
在SYSTEM.INI文件,在[BOOT]下面的“壳=文件名。正确的文件名是“的explorer.exe”,如果不是“explorer.exe的”,但“壳= Explorer.exe程序名,NA,程序就是”木马“程序,你有”木马马“。
在注册表中是最复杂,通过regedit命令打开注册表编辑器,点击查看键值:HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun目录不熟悉的自动启动文件,扩展名为EXE,紧介意在这里:一些“木马”程序生成的文件,如系统文件,想蒙混过关,如“铅酸电池1.0木马伪装,将注册表中的”HKEY-LOCAL MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun的改变总管= C:Windowsexpiorer.exe “,”木马“程序的Explorer之间只有”i“和”l“的差别”下的资源管理器键,当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY电流USERSoftwareMicrosoftWindowsCurrentVersionRun“,”HKEY-USERS **** SoftwareMicrosoftWindowsCurrentVersionRun“目录是可能的,最好的办法就是在”HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun“下找到”木马该病毒也被称为“红色代码II(红色代码)“病毒,以前流行在西方英文系统”红色代码“病毒有点相反,被称为VirtualRoot(虚拟目录)病毒,蠕虫与Microsoft已知的溢出漏洞,通过80端口来传播到其他Web页面服务器。受感染的计算机被黑客通过HTTP的GET请求运行脚本/称为root.exe得到受感染机器的完全控制权。
感染服务器的成功时,如果受感染的机器是中国的制度,程序将睡2天,其他机器休眠1天,当蠕虫,使睡眠时间机器重新启动。蠕虫也会检查机器的月份是否是10个月或一年是2002年,如果被感染的服务器将重新启动。 Windows NT系统启动时,NT系统会自动搜索C盘根目录下的explorer.exe文件在服务器上的网络蠕虫感染的explorer.exe文件,网络蠕虫本身的文件大小为8192字节的蠕虫VirtualRoot网络,通过程序执行。 cmd.exe文件蠕虫VirtualRoot网络也将可以从Windows NT系统目录拷贝到别的目录,黑客敞开了大门,同时会系统的注册表项,注册表,的蠕虫可以创建一个虚拟的目录C或者D病毒名称是值得一提的是网络蠕虫文件explorer.exe的此外,其余的操作不是基于文件的,而是直接在内存中感染,蔓延其中捕捉到更大程度的难度。
“程序的文件名,然后你可以在整个注册表中搜索。
我们来看看微软是如何描述svchost.exe的Svchost.exe的如下面的在Microsoft知识库文章314056: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的NA不必担心系统的进程列表。
svchost.exe的到底是什么做的? BR p>首先,我们要了解一点那就是在Windows系统的过程中又分为:独立进程和共享进程两种。越来越多的服务,在Windows系统中,为了节约有限的系统资源,微软已经做了很多系统服务共享模式。那svchost.exe的中间什么样的角色?
svchost.exe的工作这些服务的主机,,交由svchost.exe来启动这些服务。svchost.exe是开始的条件下,其自身的功能,并不能达到任何服务负责为这些服务,也不为用户提供任何服务。svchost.exe的服务调用动态链接库(DLL),这些系统来启动系统服务。
svchost.exe是病毒这种说法是产生它?
BR />因为svchost.exe的可以作为服务的宿主来启动服务,所以病毒,木马的编写者利用这一功能的svchost.exe机架他们的大脑来迷惑用户的入侵,破坏的目的的计算机
我怎样才能知道这是正常的svchost.exe进程,哪些是病毒进程呢?
svchost.exe的的关键在HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionSvchost的“图1所示。图1中,每个键表示一个独立的Svchost.exe组。
微软还为我们提供了在系统正在运行在svchost.exe的服务列表中看看。 Windows XP中,例如:运行,输入CMD,然后在命令行模式,输入:任务列表/ SVC。系统提出了如图2所示的服务列表。该地区周围的红色方块图2中的svchost.exe启动的服务列表。如果您使用的是Windows 2000系统放在前面的“任务列表/ SVC”命令替换:键入tlist-S“可以。如果你怀疑计算机有可能被病毒感染,Svchost.exe的服务出现异常情况,可以发现异常通过搜索svchost.exe文件,一般只会找到一个svchost.exe进程中的:“C的:windowssystem32下”目录。如果您发现了其他目录中的svchost.exe进程,很可能是中毒了。
BR />还有一个看看在这个过程中确认是否中毒。然而,由于与Windows任务管理器系统自带的svchost.exe进程路径不能看在任务管理器的执行路径,所以要使用第三方的进程察看工具。
以上的svchost.exe进程。总而言之,Svchost.exe是一个系统的核心进程,并不是病毒进程。然而,由于特殊的性质svchost.exe进程,使该病毒会千方百计的入侵Svchost.exe的了解有关svchost.exe进程的执行路径可以确认是否中毒。
3,Services.exe的原因CPU使用率100 %占用症状
在基于Windows 2000的计算机,Services.exe中的CPU使用率可能达到100%,并且计算机可能停止响应(挂起)间歇。当此出现问题时,连接到电脑(如果它是一个文件服务器或域控制器),用户将被断开。您可能还需要重新启动计算机。发生此症状如果Esent.dll错误处理文件被刷新到磁盘,。解决方案
服务包信息
要解决此问题,请获取最新的Microsoft Windows 2000的Service Pack。有关其他信息,请单击下面的文章的文章编号,以查看Microsoft知识库中相应的文章:
260910如何获取最新的Windows 2000服务包
修复信息
微软支持的修补程序,但它只是为了解决本文介绍了应用此修复程序只有系统遇到这一特定问题。此修补程序可能会接受其他一些测试,因此,如果问题不严重影响,Microsoft建议您等待包含此修补程序的下一个Windows 2000服务包。
Microsoft产品支持服务的完整列表,要立即解决此问题,请与Microsoft产品支持服务“联系,以获取此修复程序。电话号码和关于支持费用的信息,请访问Microsoft Web站点:
注:在特殊情况下,如果Microsoft支持专业人员确定某个特定的更新程序能够解决您的问题,电话支持服务费用通常可豁免费用。其他支持问题和难以解决的问题,可以为特定的更新将正常收取支持费用。
将使用正常的软件造成的CPU使用率100%
首先,开机后出现这种情况,直至关机。NA的原因可能是降落在同一时间与系统软件之一。运行输入“输入msconfig”打开“系统配置实用工具,去到”开始“标签。然后,依次取消可疑选项前面的勾,然后重新启动计算机。反复测试软件,直到找到故障原因。或者通过一些优化软件如“优化大师”用于此目的。另:如果键盘键被卡住,也可以导致上面提到的引导问题。
如果您正在使用的计算机上,这些问题的出路,带来了任务管理器(WINXP的CTRL + ALT + DEL WIN2000 CTRL + SHIFT ESC),“进程”选项卡,请参阅“CPU”栏,从里面找到资源计划(系统空闲进程是正常的一部分,它的价值是一般的RB淖线和一顿柠檬道歉寡妇敲鼻澳大利亚不安捎美泉瀑资源,所以它是越高越好)通过搜索功能找到这个进程属于该软件。然后就可以升级,关闭,卸载软件,或仅仅是为了找到一个类似的软件来代替,就可以解决问题。
5,所造成的病毒,木马,间谍软件所占用的CPU使用率100%
CPU占用率100%的故障发生往往是因为病毒木马,比如震荡波病毒。应该首先更新病毒库,电脑整机的扫描。然后,在使用反间谍软件Ad - Aware的,检查是否存在间谍软件。论坛,我的很多朋友都遇到过svchost.exe的CPU占用100%,这往往是中毒的表现。
svchost.exe的动态链接库(DLL)的形式,其中一些意志指向svchost.exe的可执行程序,它调用的动态链接库,加上相应的参数来实现Windows系统启动该服务。正是因为它的特殊性和重要性,使它更容易成为木马病毒主机。
explorer.exe进程造成CPU使用率占用100%
在SYSTEM.INI文件中,在[BOOT]个“shell =文件名,正确的文件名是”的explorer.exe“,如果不是”explorer.exe的“,是”空壳= Explorer.exe程序名,NA,后跟程序就是“木马”程序,你一直在“特洛伊木马”。
最复杂的注册表regedit命令打开注册表编辑器,在点击至:HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun目录,查看的关键是有没有不熟悉的自动启动文件,扩展名为EXE,这里切记: “木马程序生成的文件,如系统文件,并希望”铅酸电池V1.0木马“,如通过伪装蒙混过关,将
资源管理器键在注册表”HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun“值总管= C:Windowsexpiorer.exe“,”木马“程序的Explorer之间只有”i“和”l“的差别,当然在注册表中还有很多地方都可以隐藏”木马“程序,例如:下HKEY CURRENTUSERSoftwareMicrosoftWindowsCurrentVersionRun“,”HKEYUSERS **** SoftwareMicrosoftWindowsCurrentVersionRun目录。可能,最好的办法是根据“HKEYLOCALMACHINESoftwareMicrosoftWindowsCurrentVersionRun”,“木马”程序的文件名,再在整个注册表中搜索即可
导致CPU使用率占用100%
此类故障常见的原因是使用具有超线程的P4 CPU超线程,我找的一些信息是没有明确的理由说明。据一些用户总结超线程似乎天网防火墙有冲突,你可以卸载天网并安装其他防火墙解决方案,也可以关闭超线程在BIOS解决
8 AVI视频文件造成CPU使用率将使用100%
系统假的现象,在Windows XP中,单击一个大的AVI视频文件,可能造成exploere.exe过程中利用率达100%,这是因为系统的扫描文件,并检查所有部件索引大文件需要很长的时间和CPU使用率达到100%。解决办法:右击保存视频文件的文件夹,选择“属性 - >常规 - >高级,去掉”为了快速搜索,允许索引服务编制索引此文件夹“复选框前面的勾
9,防病毒软件的CPU使用率占用100%
杀毒软件一般加入,网页,邮件,实时监测个人隐私的空函数,这无疑会增加系统的负担,如:玩游戏很慢,关闭杀毒软件的解决方案是最直接的方式。
10,处理大型Word文档高CPU使用率
一般会造成电脑假,这些都是造成因为Word的拼写和语法检查程序,以打开WORD“工具 - 选项”进入“拼写和语法”选项卡“类型检查的拼写”和“检查语法为你键入”两个复选框前面的勾也被删除。 11,网络连接导致CPU使用率占用100%
当你作为一个服务器Windows2000/XP的,您收到445端口的连接请求时,系统将分配内存和少量的CPU资源,这些连接服务,超载时,它就会出现。为了解决这个问题是可以解决的,通过注册表,打开注册表,找到HKEY-LOCAL MACHNESYSTEMCurrentControlSetServiceslanmanserver的的权利称为“MaxWorkItems的”创建一个新的DWORD值然后双击单击该值,如果你的计算机有512或更多的内存,它被设置为“1024”,如果是小于512,它被设置为256。
一些不完善的驱动程序也可以造成CPU使用率过高
经常使用待机功能,也会造成系统自动关闭硬盘的DMA模式。这将不仅使系统性能下降明显,系统启动慢,但也使系统在运行一些大型软件和游戏时CPU使用率是100%,导致停止
进程占用CPU 100%时,病毒可能
系统空闲进程
进程文件:[系统进程]或[系统进程]
进程名称:Windows内存为系统进程
说明:WINDOWS页内存管理进程,拥有0优先。
介绍,作为一个单一的线程中运行在每个处理器上的过程,该系统是不处理其他线程的CPU利用率的处理器时间的分布的较大的可用于分配更多的CPU资源,数字越小的CPU资源约束。 。
Spoolsv.exe中
进程文件:spoolsv或spoolsv.exe的准备
进程名称:打印机后台程序服务
描述:Windows打印任务控制程序的打印机介绍:缓冲(spooler)中是管理缓冲池中的打印和传真作业
的Spoolsv.exe→打印任务控制程序,一般会被加载打印前的准备?
线程认识
线程是为了让程序更好的利用cpu资源,在并行/并发处理下比进程切换cpu使用所要的花销要小。在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化(Linux中可以称为轻量级进程(LWP))。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。结合生活中的例子,创建一个进程就相当于工厂新建了一个厂子,而创建一个线程就相当于在原厂的基础上增加一条生产线,在这方面也能看出创建新进程会分配新的虚拟地址空间,而创建新的线程则会共用原来的虚拟地址空间(创建进程会拷贝原有的PCB并指向原有的虚拟地址空间)。那么进程和线程的区别是什么呢?进程的作用更多是资源的管理(管理内存、文件),而线程的作用更多是负责资源的调度和执行(也是抢占式的调度)。
------>线程之间共用虚拟地址空间和文件描述符表
------>线程之间不共用的资源:①栈(函数调用栈、局部变量),每个线程的栈是不共用的但不是私有的,别的线程也可以用②上下文信息(cpu中寄存器数据保存在内存中,方便下次执行)③errno错误码
这张图也就说明每个线程在共享内存区拥有自己独立的信息
线程相比于进程的优缺点
优点(线程间共享同一虚拟地址空间)
- 创建和销毁一个新线程的代价比创建新进程的代价小(没有创建/销毁虚拟地址空间的开销)
- 线程间切换(调度)的开销更小----->cpu少所以要切换并发式的执行
- 线程占用的资源更小
缺点
- 健壮性降低:一个线程异常终止就会导致整个进程异常终止
- 编程、调试难度增加:对线程的可靠性要求很高,也要线程安全问题
- 线程不是越多越好,当达到一定数量时效率就无法提升了
- 线程过多时当多个线程尝试访问同一个资源可能会有冲突(互斥解决)
- 线程过多可能会导致某个线程一直得不到执行的机会,导致线程饥饿(同步解决)
多线程/进程的应用场景:cpu密集型------>cpu进行大量的计算,IO密集型-------->进行大量的输入输出(如 ①利用多线程通过网络输入输出②响应UI界面,借助多线程来防止由于数据计算太久导致界面卡死)
线程控制
这些函数不是系统调用函数,而是基于posix库的库函数
线程创建
int pthread_create(pthread_t * thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
thread:返回线程ID,输出型参数,本质就是一个进程地址空间上的一个地址
attr:设置线程的属性,attr为NULL表示使用默认属性
start_routine:是个函数地址,新线程启动后要执行的函数,要执行什么代码
arg:传给线程启动函数的参数
在编译时有可能报错提示对pthread_create未定义的使用,说明没有找到这个函数的链接库,只需要在编译命令中加上-lphread即可
使用ps -eLf(L来的意思是LWP轻量级进程) 查看所有的线程信息,也可以通过管道|grep test来筛选,此时得到的线程tid是站在内核角度给PCB加的编号,使用pthread_self()得到的线程tid是站在posix线程库的角度(无符号长整型)
pstack [进程id]就可以查看这个进程中有多少个线程以及线程信息(调用栈),由上图可以看出新线程并不是由主线程调用的,也就是说并不是系统调用,而是clone()函数调用而来。
也可以通过gdb attach 【pid】将gdb附加到进程上,然后使用info thread查看当前的线程信息
线程终止
正常退出:
1.从线程入口函数执行结束(最常用、最优的线程退出方式)
- void pthread_exit(void * retval);参数时线程的返回结果,通常传NULL
- int pthread_cancel(pthread_t thread);让任何一个线程结束(本进程的线程)
这个函数带来了一个问题:让代码不具备事务性,也就是说有可能代码在执行过程中由于抢占式被这个函数执行后就会终止,可能还有一些事情没有做完、一些数据没有被更新,所以并不太推荐使用这个函数
线程等待
目的和进程等待类似,防止出现类似僵尸进程的内存泄露
int pthread_join(pthread_t thread, void ** retval) ;也是阻塞函数
thread:等待的线程tid
retval:输出型参数,保存的是退出线程的退出状态,不关心时可以传NULL
线程分离
默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_join操作,否则无法释放资源,从而造成系统泄漏。
如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源。就不需要显示回收了,就相当于进程中的SIGCHLD信号的是使用类似。
int pthread_detach(pthread_t thread);
在哪里detach都是ok的,就是让这个线程分离。
线程中的同步和互斥(互斥锁+条件变量或信号量实现)
互斥:
线程不安全:在多线程环境下程序的执行结果出现预期之外的结果,线程抢占式执行,这是“万恶之源”。模拟场景:两个线程对同一个全局变量进行自增操作时分三步首先将这个全局变量从内存中拿到CPU中,然后进行自增操作,最后从CPU中放回内存,而在多线程环境下,由于两个线程操作的是同一个变量,所以当第一个线程将这个变量计算结束放回内存后第二个线程也有可能进行了相同的操作,这就导致这个变量的值再一次被更新,就不是我们预期的结果,这也就产生了bug。
临界资源:多个线程访问的公共资源叫做临界资源
临界区:访问临界区的代码
互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用
原子性(后面讨论如何实现):不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成
而解决线程不安全的方法就是在临界区中使用“互斥机制”,互斥机制的使用就是加锁解锁的过程,同一时刻只有一个线程获取到锁,只有这个获取到锁的线程才能执行临界区代码,其他线程只能等待锁的释放
可重入函数和线程安全函数的理解:
可重入函数指一个函数在任意执行流中调用都不会出现问题
线程安全函数指一个函数在任意线程中调用都不会出现问题
所以就可以看出来可重入这个概念覆盖到了线程安全,也就是说一个函数是可重入函数那么一定是线程安全的,反之一个函数线程安全则不一定可重入。
通过引入互斥量之后的代码:
```#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#define THREAD_NUM 2
int g_count=0;
pthread_mutex_t mutex;//定义全局变量,互斥量
void ThreadEnter(void arg){
(void)arg;
int i=0;
for(i=0;i<50000;++i){
pthread_mutex_lock(&mutex);//在临界区之前上锁
g_count++;
pthread_mutex_unlock(&mutex);//在临界区之后解锁
}
return NULL;
}
int main()
{
int i=0;
pthread_mutex_init(&mutex,NULL);//对这个互斥量初始化
pthread_t tid[THREAD_NUM];
for(i=0;i<THREAD_NUM;++i){
pthread_create(&tid[i],NULL,ThreadEnter,NULL);
}
for(i=0;i<THREAD_NUM;++i){
pthread_join(tid[i],NULL);
}
printf("%d
",g_count);
pthread_mutex_destroy(&mutex);//释放这个互斥量
return 0;
}
互斥锁的特点:互斥锁能够保证线程安全,由并行执行强行变为串行执行,降低了程序的执行效率,也有可能变成**死锁**。
**死锁**是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。
**死锁四个必要条件**
互斥条件:一个资源每次只能被一个执行流使用
请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放
不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺
循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系
**避免死锁**
破坏死锁的四个必要条件
加锁顺序一致
避免锁未释放的场景
资源一次性分配
死锁最常见的场景:①一个线程加锁一次之后再尝试加锁(连续加两次锁,加锁是阻塞的)②两个线程1、2,有两把锁A、B,线程1先获取到锁A再想去获取锁B,线程2先获取到锁B,再想去获取锁A,这个时候这两个锁都没释放,也就引起了死锁。③多个线程多把锁(哲学家就餐问题,五个哲学家五根筷子,解决方案是对筷子编号并规定先后顺序或增加信号量来计数)。**比较实用的死锁解决方案**->①短:临界区代码尽量短②平:临界区代码尽量不要调用其他复杂函数③:快:临界区代码执行速度尽量快,避免太耗时的操作
-----
***同步:***
在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步
简单示例:
pthread_mutex_t mutex;//定义全局变量,互斥量
pthread_cond_t cond;//定义全局变量,同步变量
//让传球和扣篮的顺序匹配
void ThreadEnter1(void arg)
{
(void)arg;
while(1)
{
pthread_cond_signal(&cond);
printf("传球
");
usleep(879789);
}
return NULL;
}
void ThreadEnter2(void arg)
{
(void)arg;
while(1)
{
pthread_cond_wait(&cond,&mutex);//让快的线程等待,等到慢的发出信号结束阻塞
printf("扣篮
");
usleep(211234);
}
return NULL;
}
int main()
{
pthread_cond_init(&cond,NULL);
pthread_mutex_init(&mutex,NULL);
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,ThreadEnter1,NULL);
pthread_create(&tid2,NULL,ThreadEnter2,NULL);
pthread_join(tid1,NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
pthread_join(tid2,NULL);
return 0;
}
在同步中一些概念的理解:
* 静态条件:因为时序问题导致的程序异常,比如上面由usleep所模拟的场景
* 在pthread_cond_wait()函数中搭配互斥锁来使用是由于条件等待大部分情况下是由两个线程完成的,一个线程进行等待,另一个线程友好的通知它什么时候等待结束,所以一定要用互斥锁来保护,没有互斥锁就无法安全的获取和修改共享数据。解锁和等待必须都是原子操作,所以这个函数两个参数分别是条件变量和互斥锁。
-----
# 生产者消费者模型
什么是生产者消费者模型?
当我们完成某些操作的时候需要一些数据,而这些数据可能由专门的线程进程产生再有专门的线程进程去使用,类比生活中的包饺子过程,有人擀面,有人包饺子。
![](https://s1.51cto.com/images/blog/202001/13/3bf9d92651a3d98e22344df7f8df86f5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
生产者负责产生数据,然后将数据放入仓库中(通常用队列管理),消费者负责消费数据把数据从仓库中拿走。
消费者和消费者之间、生产者和生产者之间、生产者和消费者之间都是互斥关系,生产者和消费者之间还具有同步关系。
下面就是一个简单的生产者消费者的实例:
#include<stdio.h>
#include<iostream>
#include<vector>
#include<pthread.h>
#include<unistd.h>
//仓库
std::vector<int> data;
//定义互斥量,互斥使消费者和生产者之间实现互斥关系
pthread_mutex_t mutex;
//定义条件变量,使消费者在vector有数据时才消费,没有数据时啥都不做
//提高代码效率
pthread_cond_t cond;
//还需要生产者和消费者->线程
void Product(void arg)
{
(void)arg;
int count=0;
//生产者负责往vector中写数据
while(1)
{
pthread_mutex_lock(&mutex);
data.push_back(++count);
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
usleep(898778);
}
return NULL;
}
void Consume(void arg)
{
(void)arg;
//消费者负责读数据
while(1){
pthread_mutex_lock(&mutex);
if(data.empty()){
//如果当前的vector是空的,消费者没有必要去一直读取其中的数据
//所以让消费者线程进行等待,不必进行空转也就节省了资源
pthread_cond_wait(&cond,&mutex);
//此函数的执行
//1.释放锁
//2.等待其他线程pthread_cond_signal()函数返回
//3.重新获取锁
}
std::cout<<"result:"<<data.back()<<std::endl;
data.pop_back();
pthread_mutex_unlock(&mutex);
usleep(124242);//让消费者执行速度快
}
return NULL;
}
int main()
{
pthread_t tid1,tid2,tid3,tid4;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
//创建线程
pthread_create(&tid1,NULL,Product,NULL);
pthread_create(&tid3,NULL,Product,NULL);
pthread_create(&tid2,NULL,Consume,NULL);
pthread_create(&tid4,NULL,Consume,NULL);
//线程等待
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_join(tid4,NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
C++中STL所提供的容器和算法都是线程不安全的,但为什么设计成这样子呢?因为C++要和C语言兼容、并且追求性极致,而加锁解锁都是影响性能的。所以我们在多线程编程时使用STL必须手动进行限制
-----
**信号量**
信号量就相当于是一个计数器,当申请资源时计数器加一(P操作),当释放资源时计数器减一(V操作),而且这个方式是原子的,和普通的全局变量不同,所以是可以用来完成同步和互斥的。
直观上来看,当用信号量表示互斥时,P和V在同一个函数中,用信号量表示同步时P和V在不同的函数。
用信号量来实现一个阻塞队列:
#pragma once
#include<vector>
#include<pthread.h>
#include<stdio.h>
#include<iostream>
#include<unistd.h>
#include<semaphore.h>
//用信号量模拟实现阻塞队列的生产消费模型
//阻塞队列的长度一般是有上限的
//如果队列为空pop就会阻塞
//如果队列为满,push就会阻塞
//信号量表示可用资源的个数
//用一个来表示队列中元素的个数
//用另一个来表示队列中空格的个数
template<class T>
class BlockingQueue
{
public:
BlockingQueue(int max_size)
:_max_size(max_size)
,_head(0)
,_tail(0)
,_size(0)
,_queue(max_size)
{
sem_init(&_lock,0,1);
sem_init(&_elem,0,0);//元素个数为0
sem_init(&_block,0,_max_size);//空格个数为队列大小
}
void push(const T &data){
//Push操作要申请一个空格资源
//如果没有空格资源就会陷入阻塞
sem_wait(&_block);
sem_wait(&_lock);//申请资源,对信号量进行P操作
_queue[_tail]=data;
_tail++;
_size++;
sem_post(&_lock);//释放资源,对信号量进行V操作
//Push结束后要释放一个元素资源
sem_post(&_elem);
}
//data是出队列的元素,
//指针表示输出型参数,引用表示出入型参数,const类型的引用表示输入参数
void pop(T*data){
//Pop操作先申请一个元素资源
//如果队列中没有元素就陷入阻塞
sem_wait(&_elem);
sem_wait(&_lock);
*data=_queue[_head];
_head++;
_size--;
sem_post(&_lock);
//Pop结束后要释放一个空格资源
sem_post(&_block);
}
~BlockingQueue()
{
sem_close(&_lock);
sem_close(&_elem);
sem_close(&_block);
}
private:
int _max_size;
int _head;
int _tail;
int _size;
std::vector<T> _queue;
sem_t _lock;//用一个二元信号量表示互斥锁
sem_t _elem;
sem_t _block;
};
模拟实现一个简单的线程池:
线程池就是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
首先是借助阻塞队列管理线程:
#pragma once
#include"blockingqueue.hpp"
class Task
{
public:
virtual ~Task()
{}
virtual void Run()
{
printf("base
");
}
};
//线程池对象是用来干嘛的?
//它启动的时候创建一组线程并去完成特定的任务(去执行一定的代码逻辑)
//这个逻辑是由调用者来决定
class Threadpool
{
public:
//n代表创建的线程个数
Threadpool(int n)
:_queue(100)
,_worker_count(n)//设定阻塞队列的起始大小
{
//创建出n个线程
int i=0;
for(i=0;i<_worker_count;++i){
//创建线程
pthread_t tid;
//由于在启动函数中要对类的成员进行操作,所以第四个参数传this指针
pthread_create(&tid,NULL,ThreadEnter,this);
_workers.push_back(tid);
}
}
~Threadpool()
{
size_t i=0;
//先让线程退出再回收
for(i=0;i<_workers.size();++i){
pthread_cancel(_workers[i]);
}
for(i=0;i<_workers.size();++i){
pthread_join(_workers[i],NULL);
}
}
//使用线程池的时候就需要由调用者加入一些任务让线程去执行
void AddTask(Task task)
{
_queue.push(task);
}
private:
BlockingQueue<Task > _queue;
int _worker_count;
std::vector<pthread_t> _workers;
static void* ThreadEnter(void *arg)
{
Threadpool*pool=(Threadpool*)arg;
while(1)
{
//循环中从阻塞队列中获取任务并执行任务
Task* task=NULL;
pool->_queue.pop(&task);
//task是Mytask类型,因为Run是虚函数
//执行的是子类,用户自定制的逻辑
task->Run();
delete task;
}
}
};
然后就是用户可以随意将想要完成的功能添加到线程池中,通过MyTask类实现:
#include"threadpool.hpp"
//这个类由用户自己定制,想干什么都是由用户自己决定
class MyTask :public Task
{
public:
MyTask(int id)
:_id(id)
{}
//重写Run函数去执行用户自定制的逻辑
void Run()
{
printf("%d
",_id);
}
private:
int _id;
};
int main()
{
Threadpool pool(10);//创建十个线程
int i=0;
for(i=0;i<30;++i){
//将自己定义的类交给线程池去进行创建、管理、调度
pool.AddTask(new MyTask(i));
usleep(789789);
}
return 0;
}
另一种常见的模式是读者写者模型,和生产者消费者模型类似,但是区别在于读者写者模型中读操作是不需要互斥的,也就是这种模型适用于“一写多读”的操作,可以提高服务器的响应效率。也有自身的加锁和解锁函数
初始化和销毁锁:int pthread_rwlock_destroy(pthread_rwlock_t rwlock);
int pthread_rwlock_init(pthread_rwlock_t restrict rwlock,const pthread_rwlockattr_t *restrict attr);
加读锁:int pthread_rwlock_rdlock(pthread_rwlock_t rwlock);
加写锁:int pthread_rwlock_wrlock(pthread_rwlock_t rwlock);
-----
C++中自带的std::thread,从C++11开始把线程纳入标准库中
包含在std::thread类中-----------------------》查看手册后信号量和读写锁还未提供,但是提供了很厉害的**原子操作(相当于在线程安全中上锁,将临界资源改为 std::atomic_int count(0);就由普通变量变为原子变量,将之前的内存cpu之间的三步操作合为一步)**原子操作本质上也是锁,但是是cpu指令级别的锁,与之前的操作系统提供的锁不同,所以开销要小很多。
-----
**
注意::
* STL不是线程安全的,原因是STL诞生1998年而线程操作是C++11加入的,而且STL追求性能,如果考虑到线程安全就会对性能有所影响
* 智能指针①unique_ptr一般只在函数内部使用,并且是函数的局部变量,所以在栈上,不涉及线程安全问题②shared_ptr是线程安全的,本质上是使用原子操作维护引用计数
*
**
以上是关于CPU使用老是100% 进程里services.exe 占用CPU非常大, 是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章