为您找到与如何调试多线程程序相关的共200个结果:
正如大家所知道的那样,多核多cpu越来越普遍了,而且编写多线程程序也是件很简单的事情。那么,如何提高多线程的CPU的一些使用率,下面是读文网小编带来的关于如何提高多线程程序的cpu利用率的内容,欢迎阅读!
首先,我来讲一下多处理的一些知识。如下图所示,
多处理器系统也只有一个待运行的线程队列,内存中也只有一个操作系统拷贝,而且也只有一个内存系统,但是会有多个cpu同时运行不同的线程。一个cpu运行一个线程,那么上图中的系统最多能在同一时间运行2个线程。其实,多处理系统需要掌握的知识不是这些,而是缓存一致性。
现在来解释下什么是缓存一致性。由于,还是只有一个内存系统。所有cpu都要和这个内存系统通信,但是只有一条总线,那么这无疑会造成总线紧张,限制整体的速度了。那么,你多个cpu也没多少意义了。解决这个问题的办法还是利用cpu的缓存机制,学过组成原理的同学都知道,cpu的缓存命中率还是很高的,有90%以上吧。那么,我继续利用缓存机制还是可以降低总线的频繁使用的。但是,每个cpu都有自己的缓存。如果有2个cpu的缓存存储的是同一内存数据的内容,其中一个cpu的缓存更新了,另外一个cpu的缓存也必须更新,这就是所谓的缓存一致性。编程多线程程序的一个很重要的一点就是避免因为缓存一致性引起的缓存更新风暴。
现在我举一个缓存更新风暴的例子。
如图所示的类定义,
锁lockHttp和lockSsl中间只有8个字节,而绝大部分系统上一个缓存行是128个字节,那么这2个锁很可能就处在同一个缓存行上面。那么,最坏的情况会发生什么事情了。假设处理器P1在运行一个处理http请求的线程T1,处理器P2在运行一个处理ssl请求的线程T2,那么当T1获得锁lockHttp的时候,锁的内容就会改变,为了保持缓存一致性,就会更新P2的缓存。那么,T2要获得锁lockssl的时候,发现缓存已经失效了,就必须从内存中重新加载缓存之类。总之,这会将缓存命中率降低到90%以下,引起性能的严重降低。而且发生这种事情的原因是因为我们不了解硬件的体系结构。
多cpu不能成倍提高速度的原因是任务的某些部分是必须串行处理的。比如,矩阵乘法可以分为三个部分,初始化矩阵,相乘,返回结果。这三部分第二部分可以用多线程来处理,第一部分和第三部分则是不可以的。而且第二部分必须在第一部分完成之后,第三部分必须在第一部分完成之后。那么,无论你添加多少个处理器,最快的时间都至少是第一部分和第二部分的时间之和。这个事实好像叫做Amdahl法则。
如果使用多线程,那么就必须考虑线程同步,而线程同步又是导致速度降低的关键。所以下面就讲述一些方法来加快多线程程序的吞吐速度。
方法一,把一个任务分解为多个可以子任务。
因为总有些子任务是可以并发的,多个子任务并发执行了很可能就能够避免cpu需要io操作的完成了,而且能够提高系统的吞吐量。
方法二,缓存多线程的共享数据。
当你已经在使用多线程了,很多时候必须使用共享数据。如果,数据是只读的,那么可以在第一次获取后保存起来,以后就可以重复使用了。但是,第一次的获取还是无法避免的需要线程同步操作的。
方法三,如果线程数目有限,就不要共享数据。
做法是为每一个线程实例化一个单独的数据,其实就是为每一个线程分配一块数据使用。这样没有线程同步操作了,速度可以尽可能的提示。
方法四,如果没办法确定线程数目到底有多少,那么使用部分共享吧。
部分共享其实就是使用多个资源池代替一个资源池,资源池的数目得更加经验来确定。如下图所示,
最后在提一个叫做Thundering Herd的问题,该问题维基百科有定义。大意是,当多个线程在等待一个资源的时候,如果事件等待到了,操作系统是唤醒所有等待的线程让它们自己去竞争资源了还是选择一个线程把资源给它。当然唤醒所有的线程肯定开销要大,而且所有没有抢到资源的线程还得重新进入等待状态,这无疑造成很多没必要的操作,浪费了没必要的线程上下文切换。总之,会不会存在Thundering Herd还是跟不同的操作系统有关的。万一存在Thundering Herd了,多线程可能就没那么好办了。
到现在我们知道了为什么多cpu并不能成倍提高程序的速度了。首先因为有些任务无法并行,其次即使是并行cpu之间还是有很多牵制的。
浏览量:4
下载量:0
时间:
在Linux系统操作中,经常会遇到多进程调试的问题,其实多进程的调试没有想象中的那么复杂,下面读文网小编就给大家介绍下Linux如何调试多进程程序,感兴趣的朋友不妨来了解下。
(1)follow-fork-mode
set follow-fork-mode [parent | child] ———— fork之后选择调试父进程还是子进程
(parent: fork之后继续调试父进程;child: fork之后调试父进程。默认的是fork之后调试父进程)
set detach-on-fork [on | off] ———— 指示gdb在fork之后是否断开某个进程的调试,或交由gdb控制
(on: 断开调试follow-fork-mode指定的进程;off: gdb将控制父进程和子进程,follow-fork-mode指定的进程将被调试,另一个进程置于暂停状态)
(2)attach pid
ubuntu下gdb要使用attach pid权限是不够的,需要切换到root,或者你可以sudo chmod +s /usr/bin/gdb给gdb添加权限。
使用attach需要在父子进程代码最开始添加sleep()语句,让进程睡眠,之后在后台运行进程,通过ps获取子进程pid,最后attach pid进入调试子进程。
eg:
$./test & //使进程test在后台运行
$ps -ef | grep test //查看进程pid
结果中类似下面的形式:
XXX 12345 23456 ———————————————— 。/test //父进程
XXX 12346 12345 ———————————————— 。/test //子进程,这里的第一个数字就是子进程pid
$ gdb -q test
(gdb)attach 12346 //attach到子进程
添加的sleep()可以是类似这样的语句:
while(pause) //pause是一个标志变量
sleep(1);
在gdb调试时你只需要set pause=0使条件不满足即可执行后续代码。
(3)gdb wrapper
当父进程fork出子进程,子进程会紧接着调用exec函数来执行新的代码,这时也可以用gdb wrapper。它的优点是不用添加额外代码。
linux下将一个进程放到后台运行:
(1)。/test &
(2)“。/test” 之后按下 “ctrl+z” , 用“bg %num”返回的数字将该进程放到后台;
linux下将进程拉回前台:
用“fg %num”
上面就是Linux多进程程序调试的方法介绍了,多进程的调试我们通常使用的是gdb,当你在调试的时候多少都会用到gdb调试工具。
浏览量:3
下载量:0
时间:
对于win7用户来说,一些应用程序有时会自动连接网络,来获取软件窗口中的广告或弹窗,而虽然用户可通过第三方辅助工具来限制这些程序联网,但是对于不经常使用第三方辅助软件的用户来说,那么你知道win7系统怎么利用防火墙限制指定程序连接网络吗?下面是读文网小编整理的一些关于win7系统利用防火墙限制指定程序连接网络的相关资料,供你参考。
1、在开始菜单下,打开控制面板,选择系统与安全,然后点击“Windows 防火墙”。
2、点击左边的高级设置,会出现高级安全windows防火墙设置。
3、点击左边的出站规则,新建一个出站规则。
4、在新建规则下面,选择程序,再选择该程序的安装路径。
5、点击阻止连接,并将下面的3个选框全部勾上。
6、在名称和描述里面,尽量写的稍微详细点,方面后期查看,再点击下一步,直到完成。
win7系统利用防火墙限制指定程序连接网络的相关
浏览量:2
下载量:0
时间:
win7系统在关机的时候会提示你没有关闭的程序,需要你选择关闭,有时候会很惹人烦闷,那么win7怎样取消关闭程序提示功能呢?读文网小编分享了win7取消关闭程序提示功能的方法,希望对大家有所帮助。
1、在“运行”中输入“gpedit.msc”后按回车。
2、依次展开“计算机配置”→“管理模板”→“系统”→“关机选项”,如图:
3、双击右侧窗口中的“关闭会阻止或取消关机的应用程序的自动终止功能”,如图:
4、选择“已启用”选项,并点击“确定”按钮,如图:
通过以上设置后就取消了win7关机时的强制关闭程序提示,让你的关机更加顺畅。有需要的用户请跟着以上步骤设置吧。
看过“win7怎样取消关闭程序提示功能”
浏览量:2
下载量:0
时间:
对于win7新用户,可能很多朋友在运行软件或者安装的时候,会经常遇到以管理员身份运行的窗口,那么Win7怎么设置总是以管理员身份运行程序呢?下面跟着读文网小编来一起了解下吧。
点击底端任务栏上的“Window”按钮,找到“计算机”。
右键单击“计算机”,进入“管理”。
计算机管理——本地用户和组——用户。
(双击“本地用户和组”,找到“用户”。)
单击“用户”,找到Administrator,右键单击进入“Administrator属性”,取消“账户已禁用”前勾选的勾。
随便选一个程序图标,鼠标右键单击图片,选择“属性”。需要在选项卡“兼容性”和“快捷方式”进行操作,勾选以管理员身份操作,如图。
浏览量:3
下载量:0
时间:
相信很多win7系统用户,在运行某些安装程序时,系统自动弹出阻止运行的窗口对话,同时还提示该程序可能存在风险的问题,这时用户即选择继续或取消运行程序,对于win7系统下出现该问题,并不是所有程序都是不安全的,那么你知道怎么取消win7运行安装程序出现阻止窗口吗?下面是读文网小编整理的一些关于取消win7运行安装程序出现阻止窗口的相关资料,供你参考。
1、在开始菜单中打开控制面板,点击用户和家庭安全,再点击用户帐户;
2、接下来点击“更改用户帐户控制设置“选项;
3、将滑块移动至”从不通知“,然后应用退出。
取消win7运行安装程序出现阻止窗口的相关
浏览量:2
下载量:0
时间:
win7用户在使用时总会遇上程序未响应的事情,那么Win7系统程序未响应怎么办呢?接下来大家跟着读文网小编一起来了解一下Win7系统程序未响应的解决方法吧。
第一步、在桌面打开win7系统 的“开始”菜单,进入“所有程序”之后进入“附件”,点击“运行”。
第二步、在运行的界面输入“regedit”回车之后打开win7旗舰版的注册表编辑器。
第三步、按照这个顺序来打开win7需要编辑的注册表:HKEY_CURRENT_USERControl PanelDesktop,在Desktop文件夹的右侧空白处新建一个“DWORD 32位值”并且改名为“WaitToKillAppTimeout”,之后把数值修改到0之后保存退出就可以了。
浏览量:2
下载量:0
时间:
不知是什么原因Win7运行应用程序时总是提示“非法操作”,那么如何解决Win7运行应用程序时提示“非法操作”呢?读文网小编分享了解决Win7运行应用程序时提示“非法操作”的方法,希望对大家有所帮助。
一、原因分析如下:
1、软件之间的互相不兼容的原因。
2、有时如果倘若未安装声卡驱动程序,运行时就会产生非法操作错误。
3、内存条质量不佳引发的(有时提高内存延迟时间,也就是将系统默认的3改为2便可解决此类故障)。
4、驱动程序未正确安装,此类故障一般表现在显卡驱动程序之上,有时在打开某些网页时出现非法操作的提示。
5、可能是系统文件被更改或损坏。倘若由此引发则打开一些系统自带的程序时就会出现非法操作的提示。
二、“非法操作”的具体含义和解决方法
1、当出现停止错误码编号为:0x0000002E
说明文字ATA-BUS-ERROR
原因分析:系统内存奇偶校验出错,通常此类故障由硬件问题导致。
解决方法:
1)将所有新近安装的硬件(比如RAM.适配器、硬盘、调制解调器等等) 卸载掉。
2)运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
3)禁用BIOS内存选项,例如cache或shadow。
4)确保硬件设备驱动程序和系统BIOS都是最新版本。
5)使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存。
6)在启动后出现可用作系统列表时,按F8快捷键,在Windows高级选项菜单屏幕上,选择“启动VGA模式:然后按回车键,如果这样做还不能解决问题,可能需要更换不同的视频适配器列表,有关支持的视频适配器列表。
2、当出现停止错误码编号为:0x0000000A
说明文字:IRQL-NOT-LESS-OR-EQUAL
原因分析:这是因为驱动程序使用了不正确的内存地址导致的。
解决方法:
1)如果无法登陆的话就重新启动计算机,如果出现可用的作系统列表时,按F8键进入安全模式,在Windows高级选项菜单屏幕上,选择“最后一次正确的配置”,然后按回车键。
2)运行所有的系统诊断软件,尤其是检查内存
3将新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件等禁用或卸载掉。
4)对安装了所有的新硬件或软件进行检查,是否正确安装。如果这是一次全新安装,请与硬件或软件的制造商联系,获得可能需要的任何Windows更新或驱动程序。
5)禁用 BIOS内存选项,例如cache或shadow
3、当出现停止错误码编号为:0x00000058
说明文字:FTDISK-INTERN-ERROR
通常的原因:容错集内的某个主驱动器发生故障引发的。
解决方法:使用Windows安装盘启动计算机,使用镜象系统驱动器引导。
4、当出现停止错误码编号为:0x00000023或0x00000024
说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM
原因分析:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内。
解决方法:
1)运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
2)禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序。
3)通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机。
5、当出现停止错误码编号为:0x0000001E
说明文字:KMODE-EXPTION-NOT-HANDLED
原因分析:这是由于内核模式进程试图执行一个非法或未知的处理器指令导致的。
解决方法:
1)确保系统有足够的空间,尤其是在执行一次新安装的时候。
2)如果停止错误消息指出了某个特定的驱动程序,那么就禁用那个驱动程序。
3)如果无法启动计算机的话,就在开机的时候进入安全模式启动,以便删除或禁用该驱动程序。
4)如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提供的适当驱动程序。
6、当出现停止错误码编号为:0x0000003F
说明文字:NO-MOR-SYSTEM-PTES
原因分析:是没有正确清理驱动程序所导致的。
解决方法:将所有的反病毒软件,磁盘碎片处理程序或备份程序禁用或卸载掉即可
看过“如何解决Win7运行应用程序时提示“非法操作””
浏览量:6
下载量:0
时间:
“将此程序锁定到任务栏”选项,相信大家都不会陌生,因为在我们安装完某个软件后,他都会默认锁定在任务栏,以方便大家对其的使用。那么你知道win7系统回收站右键属性菜单消失了怎么办吗?下面是读文网小编整理的一些关于win7系统回收站右键属性菜单消失了的相关资料,供你参考。
1、打开桌面左下角处的开始菜单,然后在其菜单中选择“运行”。在打开的运行对话框中输入gpedit.msc命令,并执行该命令。
2、此时可以看到深度系统本地组策略编辑器被打开了,在其左边菜单的列表中依次选中“用户配置”-“管理模板”-“开始菜单和任务栏”。
3、然后在其右边对应的窗口中,找到“不允许将程序附加到任务栏”。双击打开进入编辑窗口,在其编辑对话框中将“未配置”修改为“已启用”。
win7删除将此程序锁定到任务栏选项的相关
浏览量:3
下载量:0
时间:
或许很多人不知道windows系统下的组策略是干什么用的,其实组策略在系统中扮演着非常重要的角色,用户通过组策略可自定义控制用户、计算机、操作系统运行行为,简单的说,通过该功能可自定义控制win7系统下的指定程序不被其它人访问,那么你知道win7系统怎么设置组策略禁止程序运行吗?下面是读文网小编整理的一些关于win7系统设置组策略禁止程序运行的相关资料,供你参考。
1、按下“win+R”组合键,呼出运行,在框内输入“gpedit.msc”按下回车键,打开本地组策略编辑器;
2、在“本地策略编辑器”窗口左侧依次展开“用户配置”—“管理模板”—“系统”;
3、在右侧窗口找到并双击打开“不要运行指定的Windows应用程序”,在框内点击“已启用”。然后点击下面的“显示”;
4、在“显示内容”窗口中内“不允许的应用程序列表”下双击点击“值”下面的框,然后输入需要禁止应用程序全名(包括扩展名),然后点击确定即可。
win7系统设置组策略禁止程序运行的相关
浏览量:2
下载量:0
时间:
显卡驱动程序就是用来驱动显卡的程序,它是硬件所对应的软件。驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。那么你知道win7出现显卡器驱动程序已停止响应怎么办吗?下面是读文网小编整理的一些关于win7出现显卡器驱动程序已停止响应的相关资料,供你参考。
如果计算机比较老旧,显卡比较低端,适当减少桌面特效来减轻显卡的压力。具体设置方法如下:
1、在“计算机”图标上右键,选择“属性”;
2、点击“高级系统设置”,打开“系统属性”窗口,切换到“高级”标签页;
3、点击“性能”下面的“设置”按钮;
4、取消“启用透明玻璃”和“启用桌面组合”的选中状态,点击“确定”即可。
win7出现显卡器驱动程序已停止响应的相关
浏览量:4
下载量:0
时间:
通常情况下用户想要删除安装在win7系统中的应用程序,我们大多会选择通过控制面板中的卸载功能来删除,而有些软件明明被我们安装在了电脑系统中,却在win7控制面板中无法找到相应的卸载程序,那么你知道控制面板无法找到所要删除的卸载程序怎么办吗?下面是读文网小编整理的一些关于控制面板无法找到所要删除的卸载程序的相关资料,供你参考。
这里以“kugou”为例,并以默认安装路径,为大家做个示例。酷狗软件的默认安装路径通常为C:Program Fileskugou 目录!
1、打开计算机,依次打开“C盘”—“Program Files”;
2、在“Program Files”文件夹内找到与需要卸载的程序名相近的文件夹名称并双击打开;
3、在文件夹中,双击打开“Uninstall.exe”,就可以将该程序卸载掉了。
通过上述方法,我们不难看出,处理利用控制面板中卸载功能来删除,我们还可以使用程序自带的卸载功能来删除相应的应用程序!
控制面板无法找到所要删除的卸载程序的相关
浏览量:72
下载量:0
时间:
有一些对 Windows 10 还不太熟悉的新用户,可能不知道怎么设置默认程序,那么Win10怎么设置默认程序呢?今天读文网小编与大家分享下Win10设置默认程序的具体操作步骤,有需要的朋友不妨了解下。
鼠标点击左下角菜单栏,在所有应用中找到windows 系统文件夹,打开 默认程序的按钮之后就能够随意的更改系统默认的应用程序啦。
浏览量:3
下载量:0
时间:
为了让电脑运行更加流畅, 卸载不常用的软件成了不二之选。那么Win8怎么卸载安装的程序呢?读文网小编分享了Win8卸载安装程序的方法,希望可以帮助到大家。
如果有安装电脑管家等软件的话,可以:
打开”电脑管家“,选择”软件管理“。
点击”卸载“,就可以看到所有已安装的程序。
还可以直接在Metro界面的”应用“查看自己已安装的程序:
点击“开始”按钮,再点击箭头。
在“应用”里就可以找到所有已安装的应用。
浏览量:5
下载量:0
时间:
电脑是由各个硬件组成的,硬件使用的同时,需要正确的驱动程序的支持,那么win7系统怎么手动更新驱动程序呢?读文网小编分享了win7系统手动更新驱动程序的方法,希望对大家有所帮助。
1.使用组合快捷键“win+R”打开运行并输入“gpedit.msc”,然后回车确认。
2.此时会打开如下所示的本地组策略编辑器。在左边栏目中,依次进入目录“计算机配置” — “管理模块” — “系统” — “设备安装” — 双击“设备安装限制”。注意:由于进入目录较多,注意下拉滚动条。
3.在右边打开的栏目中,右击“禁止安装未由其他策略设置描述的设备”,选择“编辑”
4.打开如下界面后,在左上角选择“已启用”选项,然后点击“确定”按钮保存退出即可。
浏览量:3
下载量:0
时间:
现在我们使用电脑,经常会同时打开多个窗口,以供我们更加方便的操作电脑,但是窗口一多的话,切换起来就不太方便了,经常需要等待缩略图显示之后,点击相应的窗口才能进行切换,或者是直接使用快捷键来操作,这对于用户来说已经很方便了。那么你知道win7系统怎么快速切换程序窗口吗?下面是读文网小编整理的一些关于win7系统快速切换程序窗口的相关资料,供你参考。
在Win7中,任务栏相同程序按钮合并是默认设置。用鼠标切换这类程序时需要等略缩图显示之后,点击相应的略缩图才能完成切换。
这个操作虽然简便,但还能更简便,就是直接用鼠标点击这些合并按钮便可以切换窗口,而不必等待略缩图显示。只要稍微修改注册表,便可以达到目的。由于涉及到注册表操作,在修改之前先备份注册表,以防误操作隐患。
1.在开始菜单搜索栏或者运行中输入regedit后回车打开注册表编辑器
2.定位到HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced
3.在右边窗口新建DWORD(32位)值,命名为LastActiveClick,双击打开后,将数值数据改为“1”并确定
4.重启explorer.exe
完成后,只需在已经合并的任务栏按钮上单击鼠标,即可完成同一程序不同窗口之间的切换任务,效率更高。如果想恢复默认设置,将LastActiveClick的数值数据再次改为“0”即可。
win7系统快速切换程序窗口的相关
浏览量:3
下载量:0
时间:
笔记本用户知道电脑使用过一段时间后,由于内存的越来越少,程序运行速度会越来越慢,有时甚至会出现提示“程序未响应”,这种情况下,往往不管按什么键都没办法。那么你知道win7系统怎么批量结束运行程序吗?下面是读文网小编整理的一些关于win7系统批量结束运行程序的相关资料,供你参考。
1、在win7系统桌面空白处点击右键选择新建-快捷方式;
2、然后在输入对象的位置中输入:taskkill.exe /F /IM iexplore.exe /T并点击下一步;
3、完成之后桌面就会出现一个快捷方式,后面如果需要关闭重复的IE进程的话,直接双击这个快捷方式即可全部将重复的多个进程一键关闭掉了。
win7系统批量结束运行程序的相关
浏览量:5
下载量:0
时间:
如果电脑的内存很小,或者是显卡驱动不行,都会造成电脑很卡的情况,那么win8怎么删除不常用的应用程序释放系统内存呢?接下来大家跟着读文网小编一起来了解一下win8删除不常用应用程序的解决方法吧。
1.首先,我们同时按下win+x打开电脑的快捷菜单栏,这里的快捷菜单和win7系统中我们经常所说的快捷菜单是差不多的,我们在其中选择设备管理器并单击进入。
2.在设备管理器的界面中,我们就可以看到目前系统中安装过的所有的设备驱动了。大家找到自己平时不怎么用到的设备,例如小编这里以声音、视频和游戏控制器设备为例,右键点击,然后选择卸载。
3.接下来系统会弹出一个确认卸载的窗口,我们直接选中“删除此设备的驱动程序软件”,然后点击下方的确定即可。
重装系统之后我们适时的清理下电脑,对于电脑的运行速度有很大的提升,换个内存够大的电脑的确是个很好的解决方法,但并不是唯一,可以找个省钱又省事的方法还是不错,赶快操作起来吧!
看过“win8怎么删除不常用的应用程序”
浏览量:2
下载量:0
时间: