
函数:
voiddelay(uinti)
{
while(i)i--;
}
这样的延迟设计很不好,因为受影响的因素太多。
首先就是机器的CPU频率,快的CPU执行i--这句的机器时间短,慢的机器就很慢。
其次是当前机器的负荷情况,负荷较重时,系统给当前进程分配的CPU时间少,执行这些语句的机会就少,延迟就增加了。
影响因素还有很多在此不再列举。
做延迟程序主要有以下几种方法:
1定时器法
用CWnd::SetTimer()函数设置定时器,当定时时间到时发送WM_TIMER消息触发CWnd::OnTimer()函数,重载它把自己的代码放进去。
SetTimer()参数为毫秒,此方法定时不高,受系统负荷影响。
2休眠法
调用系统API函数Sleep(2000);参数单位是毫秒,2000代表2秒。
此方法主要收到当前系统负荷的影响,定时不太准确
3时刻比较法
定义两个CTime变量,一个用于记录起始时刻,另一个放在循环体中不断刷新当前时刻,并减去起始时刻,自己计算是否到时间了。
此方法因CTime变量只能获取秒级的时刻,且收到系统负荷影响,精度也较低。
4CPU滴答查询法
利用两个API函数QueryPerformanceFrequency()和QueryPerformanceCounter()分别获取CPU的频率和CPU滴答数,依时刻比较法自己计算时刻差值。
因为CPU滴答数是等于CPU的机器周期的,所以是Windows系统里最最精确的计时方法了。现在的CPU主频都是GHz级的,因此理论上计时精度可以到纳秒。
只要系统负荷不太重,此法可用于极其精确的延时程序。
因为Windows并不是实时 *** 作系统,因此对于太过精确的计时,还是无能为力的。
select是用来设置超时时间的,其第一个参数本来是一个文件号,假如读取该文件长时间没有返回则超时跳出,而这部分代码将文件号设置为0,说明只是为了控制延时不过看你这部分代码,明显只是实现一个比较精确定时的sleep这段代码之所以这么做,是因为linux本身的sleep函数非常不准(windows也是一样),在线程较多,cpu任务较重的时候,sleep函数的精确度根本无法达到要求于是你这段代码使用select来代替sleep更为精准,其精准程度和内核相关,如果内核的滴答频率决定的,一般是100HZ也有1000hz的(因内核版本不同而不同),也就是说select做多可以精确到10ms,或者1ms,而sleep就做不到于是这段函数最重要的作用就是用高精确的select函数来代替低精确度的sleep函数,实现时间较为精准的延时。可查阅《Linux就该这么学》了解更多Linux介绍。
每个Linux进程都有三个相互关联的间隔定时器。其各自的间隔计数器都定义在进程的task_struct结构中,如下所示(include/linux/schedh):
struct task_struct{
……
unsigned long it_real_value, it_prof_value, it_virt_value;
unsigned long it_real_incr, it_prof_incr, it_virt_incr;
struct timer_list real_timer;
……
}
(1)真实间隔定时器(ITIMER_REAL):这种间隔定时器在启动后,不管进程是否运行,每个时钟滴答都将其间隔计数器减1。当减到0值时,内核向进程发送SIGALRM信号。结构类型task_struct中的成员it_real_incr则表示真实间隔定时器的间隔计数器的初始值,而成员 it_real_value则表示真实间隔定时器的间隔计数器的当前值。由于这种间隔定时器本质上与上一节的内核定时器时一样的,因此Linux实际上是通过real_timer这个内嵌在task_struct结构中的内核动态定时器来实现真实间隔定时器ITIMER_REAL的。
(2)虚拟间隔定时器ITIMER_VIRT:也称为进程的用户态间隔定时器。结构类型task_struct中成员it_virt_incr 和it_virt_value分别表示虚拟间隔定时器的间隔计数器的初始值和当前值,二者均以时钟滴答次数位计数单位。当虚拟间隔定时器启动后,只有当进程在用户态下运行时,一次时钟滴答才能使间隔计数器当前值it_virt_value减1。当减到0值时,内核向进程发送SIGVTALRM信号(虚拟闹钟信号),并将it_virt_value重置为初值it_virt_incr。具体请见743节中的do_it_virt()函数的实现。
(3)PROF间隔定时器ITIMER_PROF:进程的task_struct结构中的it_prof_value和 it_prof_incr成员分别表示PROF间隔定时器的间隔计数器的当前值和初始值(均以时钟滴答为单位)。当一个进程的PROF间隔定时器启动后,则只要该进程处于运行中,而不管是在用户态或核心态下执行,每个时钟滴答都使间隔计数器it_prof_value值减1。当减到0值时,内核向进程发送 SIGPROF信号,并将it_prof_value重置为初值it_prof_incr。具体请见743节的do_it_prof()函数。
Linux在include/linux/timeh头文件中为上述三种进程间隔定时器定义了索引标识,如下所示:
#define ITIMER_REAL 0
#define ITIMER_VIRTUAL 1
#define ITIMER_PROF 2
数据结构:struct itimerval,struct timerval,struct sigaction()
系统调用:time(),gettimeofday(),sigemptyset(),sigaction(),settimer()
希望能够帮助你 ^_^ 也希望能够选为最佳答案!
当然还有很多比较好用的办公软件,其实Office和WPS都是一些比较狭义的办公软件,而广义的办公软件特别多,比如:PDF类、知识管理等;接下来我分享几款工作中比较实用的办公软件,希望能对大家有所帮助吧!~~
FastStone Capture
FastStone Capture是一款特别好用的屏幕截图软件。
如果你还在用QQ自带的截图软件,那你真的OUT了,因为QQ自带的截图软件不够灵活,并且图像清晰度也不高,而它可以图像浏览、编辑和抓屏,支持包括BMP, JPEG, JPEG 2000, GIF, PNG, PCX, TIFF, WMF, ICO 和TGA在内的所有主流格式,其独有的光滑和毛刺处理技术让更加清晰,提供缩放、旋转、减切、颜色调整功能,而且 *** 作相当简单,赶紧来收藏吧!
一粒云盘
一粒云盘是一款的适合教育内部使用的文件存储及文件管理软件。
主要是用来管理教育机构的文件和存储大文件,帮助学校实现文件的大容量存储,便于学校成员共享文件管理,支持多级用户权限管理,集中存储与管理团队内的文件,防止教师将重要的数据散落在每台电脑中,确保企业数据安全可控,是学校的良心产品。
Xmind
xmind是一款极具强大且实用的思维导图软件。
一、不能没有的pdf软件
以下介绍的是PDF(Portable Document Format)常用的阅读、编撰以及其他工具。
阅读工具
1、Adobe AcrobatReader中文版
应用平台:Windows XPService Pack 3(32 位)或 Service Pack 2(64 位);Windows Server 2003 R2;Windows Server 2008或2008 R2;Windows 7;Windows 8 或 81
类型:免费软件
简介:官方出品的阅读器,允许阅读PDF文档,填写PDF表格,查看PDF文件信息,快速编辑PDF文档,转 Word、Excel。稳定性和兼容性好。缺点是体积庞大,启动速度慢。
2、Foxit Reader
类型:免费软件
支持的平台:Windows 系列/移动平台/Linux
简介:能实现绝大部分的阅读功能。绿色软件。体积小巧,启动速度快。
3、百度阅读器
类型:免费软件
支持的平台:Windows 系列
简介:能实现绝大部分的阅读功能。完美支持epub、pdf、txt、doc、ppt等主流格式。
4、See9 PDF Reader
类型:免费软件
支持的平台:Windows 系列
简介:软件支持多种浏览模式,是一款真正免费的、简洁易用的PDF阅读器。
5、Sumatra PDF
类型:免费软件
支持的平台:Windows 系列
简介:支持PDF, eBook (ePub, Mobi), XPS, DjVu, CHM, Comic Book (CBZ and CBR)等多种格式。界面简洁 ,体积小,启动速度快。
6、PDFView4NET
PDFView4NET 是一个面向在 NET 中增加 PDF 补偿和打印支持的 NET 工具包 它包括了一个针对 Windows 窗体的 PDF 浏览器控件,以及一个针对从 NET 应用程序中补偿和打印 PDF 文件的 NET 函数库 面向 Windows 窗体的 PDF 浏览器控件支持注释 PDF 文件,漫游书签,增加和消除文件附件,以及其他特性。这个包包括了自有的 PDF 补偿引擎,其不依赖于任何软件来补偿和打印 PDF 文件 PDFView4NET 包已经在 C# 中得到了全面的发展,100% 可 *** 作的代码。
7、iBooks
类型:免费软件
支持平台:iOS 4+
简介:iBook程序还阅读PDF格式文件。你可以用以下两种方式来将PDF格式文件添加到iBook当中:在iPad上收取邮件,然后利用iBook去打开该附件,之后该PDF就会自动被添加到iBook的书架上,另外一种方式是将PDF文件添加到iTunes的资料库之中然后同步到iPad里。在iBook笔记本中,你可以通过点按一个按钮来查看iBook书籍与PDF格式文书。PDF文件打开时会自动全屏,让你能以阅读电子书的方式来阅读PDF格式。你也可以翻阅书页,添加书签或是放大文书的内容。
转换工具
1、Adobe官方编辑转换工具Adobe Acrobat
类型:商业软件支持的平台:Windows 系列/移动平台/MAC/Unix/Linux
简介:支持简单的PDF转换成Word、Excel,比较快速,效果比较好
2、在线PDF转换Word:各大转换网站
类型:免费软件
简介:利用网站在线转换,方便简单,不用安装另外的转软件,并有多种选择
3、易捷PDF转换成Word转换器
类型:免费软件
支持的平台:Windows 系列
简介:能够轻松的将文字的PDF转换成Word,同时能够很好的保留原始PDF文档的样式与排名,同时支持批量转换,是办公必备的好用小软件。
创编工具
★推荐产品:官方编辑工具Adobe Acrobat、Adobe Indesign
类型:商业软件
简介:生成PDF文件,修改PDF文件。功能强大。
其它产品:
★Foxit PDF Editor
软件授权:共享版
简介:Foxit PDF Editor 是第一个真正的PDF文件编辑软件。许多人都希望能找到一个像编辑其它类型的文档的编辑器,事实上在 Foxit PDF Editor 出现之前,根本没有这样的工具。每一个PDF文件都包含很多页面,每一页包含各种可视对象,如文本对象、图形对象和图像对象。而每一个对象都由其属性来定义其显示的方式。
★Foxit PDF Creator
支持的平台:Windows 2000/2003/XP/Vista(32-Bit&64-Bit)/7(32-Bit&64-Bit)
简介:是PDF创建工具,可以将支持打印的任何类型的文档,象DOC、XLS、PPT、TXT、E-MAIL甚至HTML格式的文档通过点击列印转换成标准的PDF格式。
★金山WPS
类型:免费软件
支持的平台:安卓平台
简介:免费国产办公软件,可将文档转化为pdf格式
★Pdf995 Printer Driver
类型:免费软件
支持的平台:Windows 系列
简介:安装后,会加入一部名叫PDF995的打印机。只要在有提供打印的软件上选择打印到PDF995,便可将整个文档打印存为PDF。
★Pdf Factory
类型:共享软件
支持的平台:Windows 系列
简介:和上面的工具是一样的用法,也是打印文件到PDF中。支持安全设置、预览、嵌入字体,允许插入和删除某个页。
★ComponentOne StudioPDF控件
支持平台:Asp NET
简介:在应用程序中,可以使用ComponentOne为ASP NET出品的PDF控件来创建Adobe PDF格式的文件。可以将内容添加到文件的这些命令与NET Graphics图表类中可用的这些类似。ASP NET的PDF控件提供了安全性、密集性,大纲、超链接和附件。
特性:图元文件中图像的快速渲染和压缩;AcroForms支持;HTML支持;熟悉的语法使用DrawImage方法;管理文件限制;将附件添加到PDF文件;所有者和用户密码保护;添加图形元素;创建一个大纲结构;添加超链接和本地链接和控制文件信息和浏览器偏好设置。
★其他编辑软件
Pitstop(作为插件形式与acrobat专业版协助)
NEO(MAC上的专业PDF编辑软件)
packedge(esko流程中的编辑软件,且对PDF支持很好编辑类)
ARTPRO(MAC上的pdf专业编辑软件)
Adobe Illustrator(仅可汇入该档案的某个页面编辑类)
PDF Creator
PrimoPDF
CutePDF
Microsoft Office2007/2010加载项:Microsoft Save as PDF或XPS
分割合并工具
★推荐产品:Foxit PDF Page Organizer
简介:一款可以拆分、合并PDF页面、重排页面、组织书签(bookmarks)、添加注释(annotations)和创建链接的PDF页面管理器。
★其它产品:PDFSplit-Merge
一款好用的PDF分割/合并工具,可以帮助你从PDF中“去粗取精”,也可将多个PDF文档打包在一起,以方便传输、阅读。软件本身是独立的,无需预装 Adobe Acrobat。
★PDFdo
优点:无需安装任何软件即可在线合并分割PDF。
加密工具
ProfPDF Protection Manager
PDF 加密工具,是一款给PDF文档加密码保护或在知道密码的情况下移除密码保护的工具。
解密工具
★推荐产品:Advanced PDF Password Recovery
PDF密码破解工具,支持暴破、掩码、字典、密钥四种破解方式。
★pdf密码暴力破解工具 PDFPasswordCracker
★去除PDF文件加密A-PDF Restrictions Remover
类型:共享软件
支持的平台:Windows 系列
简介:可以去除PDF文件的限制,比如不允许打印等。使用超级简单,安装后,在我的电脑中右键单击PDF文件,选择Remove Restrictions 选项即可。如果碰到有需要密码打开的文件,需要输入正确密码。
★PDFdo解密去除限制
可在线去除PDF密码 和各种限制。
二、图像处理软件
现在办公肯定少不了P图,那么图像处理软件必不可少了。adobe家族常用软件:photoshop,illustrator,CorelDRAW Graphics Suite
三、cad,计算机辅助设计软件
建筑、设计、机械、道路等专业的这个软件必不可少。
四、可视化思维管理工具-XMind
XMind 是一款非常实用的商业思维导图软件,应用全球最先进的Eclipse RCP 软件架构,全力打造易用、高效的可视化思维软件,强调软件的可扩展、跨平台、稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率。
五、远程协助控制软件-TeamViewer
TeamViewer是一款穿透内网远程控制软件,能在任何防火墙和NAT代理的后台用于远程控制,桌面共享和文件传输的解决方案。软件第一次启动在两台计算机上自动生成伙伴ID,只需要输入你的伙伴的ID到TeamViewer,然后就会立即建立起连接。公司致力于在全球实现在线支持和实时协作,远程支持、远程访问和在线协作的解决方案。用于实现远程支持、远程访问、远程管理、家庭办公及在线协作和会议功能的软件。支持Windows、Mac、Linux、Chrome OS、iOS、Android、Windows Mobile和BlackBerry平台。
六、必不可少的截图软件-Snipaste 暂时就这些,希望大家补充吧
让你爽到爆OfficeSuite
MAC下强烈推荐mac的iwork工作套件,日常办公不输入office wps个人不喜欢。 其他的办公软件:
你想要功能全面、世界通行的办公软件,还是老老实实的用 Office的吧。它不存在完美替代品。
这两个基本上是win系统上面最长见到的两个办公软件了,但是天下虽大,也未必没有其他的办公软件了。
llinux系统只要是程序员就算没有用过也应该听过的类unix系统。上面没有office怎么办呢?不过有自带的libreoffice办公软件也是很像office和wps。libreoffice包阔这几大类。当年德国人不信任windows系统。用了linux差不多十年时间,用的办公软件就是libreoffice。
(1)LibreOffice文本文档
(2)LibreOffice电子表格
(3)LibreOffice演示文稿
(4)LibreOffice公式
(5)LibreOffice绘图
(6)LibreOffice数据库
另外就是还有谷歌的docs办公软件,这个办公软见是基于网络的云办公软件,这样就避免了软件多开的卡顿情况。但是由于谷歌的服务在中国大陆大陆地区被阉割的很彻底。目前情况下我很少看见有人用这个办公软件。
感谢@悟空小秘书邀请。我用过Office,而且在可以预见的未来,还会一直使用Office,所以,以下请看我的工具箱:
1office excel/word/outlook/ppt办公必备
2PDF这个也是商务必备,所有给客户的电子资料,都要转成这个格式发送,美观,保密,哈哈
3查看一般windows都带,也挺方便的,所以也不用特别装什么别的软件;楼主也没发觉其他有特色的查看器;
4photoshop商务人士应该偶尔作弊的时候需要用用,楼主暂时还没需要作弊,暂时没装,哈哈!不过隐隐的感觉到,未来可能要用上;
5格式工厂用来做格式转换的,什么mp3,mpg,avi之类的相互转换,偶尔需要转换格式,将大文件压小发给客户需要用到,不过不怎么常用。
WPS建议使用付费版,免费版广告太多了哦。小弟渐渐的开始往商务方面的工作转了,渐渐的发现需要给自己的电脑里添置一些强大的商务软件才可以满足自己的日常工作,同时吧工作做的更好,更快。
那么除了上述的这些,我们使用办公软件,一个是为了效率,另一个方便也是为了更好的办公,还会用到这些。
============华丽的分割线===========
一、护眼的工具——眼睛护士
一款可以定时提醒休息,保护眼睛的护眼软件,长期的使用电脑就会导致眼睛干涩,疲劳不适。有时候我们因为各种繁忙而忘记休息,这个时候我们使用眼睛护士,就根据自己的喜好对休息的时间进行设置,到了休息时间,界面会提醒我们休息,但是不会强制我们休息是不是很人性呢,快给你的眼睛放松放松吧。
二、短小精干电脑增强关机软件——Shutdown8
由于各种原因,我们经常需要用到电脑自动关机功能,打个比方,有时候因为和别人在线传输文件等原因,人下班了但是不能立即关机,虽然Windows自带有shutdown命令,但对菜鸟来说,用起来始终不太顺手。Shutdown8是一款短小精干的电脑快速关机和可定时关机的软件。 可以通过简单地 *** 作,将程序添加到任务栏,两次单击即可完成:关机、注销、重启、定时、睡眠或休眠等 *** 作。支持使用键盘的 [+] [-] 或者鼠标滚轮对时间进行更改,支持休眠模式:将内存(RAM数据)中的内容保存到硬盘,并临时关闭电脑,支持睡眠模式:使用小功率的内容保存的RAM,并能高速唤醒计算机,完整支持Windows XP、Vista、7、8和10,包括x86架构下的32位和x64位架构下的64位系统。如果电脑安装的是 Windows 7/8 系统,会在定时器中提供倒数时间的调节功能,此时只需单击界面上的加减号,便可调节关机或重启的预计时间。
三、隐私保护系统优化工具——Ccleaner
CCleaner,清理器免费的系统优化和隐私保护的软件。可以清除Windows系统不再使用的垃圾文件,以腾出更多硬盘空间。它的另一大功能是清除使用者的上网记录。CCleaner的体积小,运行速度极快,可以对临时文件夹、 历史 记录、回收站等进行垃圾清理,并可对注册表进行垃圾项扫描、清理。附带软件卸载功能。
四 、无所不能的文件批量更名软件:Bulk Rename
在我们传统的印象中,要更改文件的扩展名,需要先通过系统设置将扩展名显示出来,然后更改。掌握批量修改文件名的方法对生活是有很大的帮助的,特别是整理文件的时候,当然一款简单好用的软件也是必不可少的。Bulk Rename是一款小巧的文件名和扩展名的批量重命名工具,你可以批量给文件或文件夹名称添加前缀或后缀,添加日期,自动编号,批量删除指定字符,批量插入指定字符到文件名中的指定位置,批量替换指定字符,批量删除数字、汉字等更难能可贵的是,它还支持文件扩展名的批量更改,保存更名后的文件到新的位置,支持用户使用强大的正则表达式对文件名进行批量修改。
__________还有手机上的办公软件,你应该也需要___________
一、让人赞不绝口的自动化报销神器:报销吧
作为一名上班族少不了各种发票需要报销(出差差旅、饭补、打车、办公采购、项目报销),很烦心怎么办?一拍即得,1秒识别发票信息,报销吧就是这样一款神奇的自动化差旅报销软件,不仅可以一键真假发票OCR识别技术,通过OCR技术识别发票信息也可以实现无需贴发票,办公自动化、流程化,提高时间的利用效率。平时我们商务、销售、市场、老板人员出差要订票、打车、住酒店,而报销吧整合国内的众多 旅游 服务商,比如:飞鹤航空、携程与同程网的机票酒店、滴滴出行企业版、京东企业购等,一款软件内可以实现商务出差全过程,从出差到报销,无需再下载多个软件应用,只需一个报销吧,就可以实现应用内一站式预订机票、酒店、火车及打车和出差比价的功能,出差就能“免垫资、免发票、免报销”。出差结束后在手机上自动生成了报销单,当员工回到公司时,钱就到账了,让你更加省事。适用人群:财务、老板、商务、销售、上班族等。
二、脑图与心智地图工具:MindMeister
画脑图有很多好处,比如记录头脑风暴、分享思想、计划项目、可视化思考。思考一件事情,做计划等等。此法主要采用图志式的概念,以线条、图形、符号、颜色、文字、数字等各样方式,将意念和信息快速地以上述各种方式摘要下来,成为一幅心智导图(Mind Map)。Mindmeister在后台的编辑功能上采用大量AJAX技术,用户体验相当不错。MindMeister是一个支持制作思维导图的工具,可以随时保存,然后在其他电脑上继续编辑;支持快捷键等, *** 作和软件非常类似,也适合在线创作使用。除了在线创建脑图之外,还可以与朋友实时合作,一个人创建的部分会自动发送给其他人。它还提供分享,密码保护,导出成PDF或各种。已经支持智能手机客户端,苹果、安卓、Ipad都可以安装客户端来实现手机上制作了。同类其他好用的还有Total Recall。
三、便捷的任务项目团队协作工具:Towerim
每年快要过去的时候,我们总是习惯性地去写一些年终总结和新一年的计划。你的年计划没有有效地实施和记录总结。你的年计划太过粗糙,没有实际的作用。所以如果没有好的工具,你的新一年的年计划很快会出炉,但是依旧会埋没在一大堆笔记中间,发霉发臭。所以这里我给大家推荐一个我一直在用的工具:Tower,这个工具能帮助你更好地计划并实施你的年计划。如果你也在一个小的创业团队,可以尝试向你的小组推荐这个工具。Tower 是 24 小时的网上办公室,你可以在这里快速处理任务、开展讨论、查看项目进展。把项目的工作目标,分解成详细的任务,让团队里的每个人,都清楚自己该干什么。适用人群:团队、外包等项目管理者
四、小而美的 ToDo 待办事项提醒工具:滴答清单
俗话说的好:工欲善其事,必先利其器。别总是学习方法,不会使用工具。工具在精不在多,实用才是硬道理。
一,所谓的“办公”指的是什么? 这是必须精准定义的,定义了您的办公环境才存在下一步,什么办公软件最好~~~~现在通常所说的办公软件指的是协同作业的电子数据工作流。。。。。除非你所谓的办公就是指偶尔码两个字体无关的字儿(那实际用Windows自带的的写字板就可以完美做到),。 二,常见大公司都使用OA系统作为办公平台,OA平台内的文档编辑是需要字处理软件安装在浏览器中的插件实现的|~~~~目前,只有Office和WPS可以做到(不含linux版WPS)。一般来说,OA系统自带在线邮件处理系统,但个别公司会格外部署Exchange服务,想完美匹配Ex只有Outlook。(因为国产化计划,我们公司现在已经迁移到Foxmail上了~~~当然,ExChange服务器都停掉了,结果邮件系统也没人用了) 三,个别国外大公司由于守旧和部署成本问题,使用的是IBM的Notes套件。。。。这个吧,学习成本太高,没逼到你头上连想你最好也别想。
百度有道笔记
随便做,还可以导出word和pdf
都是用office的比较多,在高校教学。office2010及以上,2016功能多,用的也很舒服。WPS也没出几年,做什么都是很不方面的。学习办公,还是用office最好 ,用office2010学习考试,用2016办公。WPS只要是模板多,安装块,也就没有什么了、
开源的libreoffice也不错呀
任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸。
作者 | dog250
责编 | 刘静
出品 | CSDN博客
但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2623将其初引入时的论文,还是各类源码分析,文章,以及Linux内核专门的图书,都给人这样一种感觉,即 CFS调度器是革命性的,它将彻底改变进程调度算法。 预期中,人们期待它会带来令人惊艳的效果。
然而这是错觉。
人们希望CFS速胜,但是分析来分析去, 却只是在某些方面比O(1)调度器稍微好一点点 。甚至在某些方面比不上古老的44BSD调度器。可是人们却依然对其趋之若鹜,特别是源码分析,汗牛塞屋!
为什么CFS对别的调度算法没有带来碾压的效果呢?
首先,在真实世界,碾压是不存在的,人与人,事与事既然被放在了同一个重量级梯队比较,其之间的差别没有想象的那么大,根本就不在谁碾压谁。不能被小说电视剧**蒙蔽了,此外,徐晓冬大摆拳暴打雷雷也不算数,因为他们本就不是一个梯队。
任何领域,革命性的碾压式推陈出新并不是没有,但是概率极低,人们普遍的狂妄在于,总是认为自己所置身的环境正在发生着某种碾压式的变革,但其实,最终大概率不过是一场平庸。
最终就出现了角力,僵持。
其次,我们应该看到,CFS调度器声称它会给交互式进程带来福音,在这方面CFS确实比O(1)做得好,但是惊艳的效果来自于粉丝的认同。Linux系统交互进程本来就不多,Linux更多地被装在服务器,而在服务器看来,吞吐是要比交互响应更加重要的。
那么以交互为主的Android系统呢?我们知道,Android也是采用了CFS调度器,也有一些事BFS,为什么同样没有带来惊艳的效果呢?
我承认,2008年前后出现CFS时还没有Android,等到Android出现时,其采用的Linux内核已经默认了CFS调度器,我们看下Android版本,Linux内核版本以及发行时间的关系:
Linux内核在2623就采用了CFS调度器。所以一个原因就是没有比较。Android系统上,CFS没有机会和O(1)做比较。
另外,即便回移一个O(1)调度器到Android系统去和CFS做AB,在我看来,CFS同样不会惊艳,原因很简单,Android系统几乎都是交互进程,却前台进程永远只有一个,你几乎感受不到进程的切换卡顿,换句话说,即便CFS对待交互式进程比O(1)好太多,你也感受不到,因为对于手机,平板而言,你切换 APP 的时间远远大于进程切换的时间粒度。
那么,CFS到底好在哪里?
简单点说,CFS的意义在于, 在一个混杂着大量计算型进程和IO交互进程的系统中,CFS调度器对待IO交互进程要比O(1)调度器更加友善和公平 。理解这一点至关重要。
其实,CFS调度器的理念非常古老,就说在业界,CFS的思想早就被应用在了磁盘IO调度,数据包调度等领域,甚至最最古老的SRV3以及43BSD UNIX系统的进程调度中早就有了CFS的身影,可以说,Linux只是 使用CFS调度器 ,而不是 设计了CFS调度器 !
就以43BSD调度器为例,我们看一下其调度原理。
43BSD采用了1秒抢占制,每间隔1秒,会对整个系统进程进行优先级排序,然后找到优先级最高的投入运行,非常简单的一个思想,现在看看它是如何计算优先级的。
首先,每一个进程j均拥有一个CPU滴答的度量值Cj,每一个时钟滴答,当前在运行的进程的CPU度量值C会递增:
当一个1秒的时间区间ii过去之后,Cj被重置,该进程jj的优先级采用下面的公式计算:
可以计算,在一个足够长的时间段内,两个进程运行的总时间比例,将和它们的Base_PrioBase_Prio优先级的比例相等。
43BSD的优先级公平调度是CPU滴答驱动的。
现在看Linux的CFS,CFS采用随时抢占制。每一个进程j均携带一个 虚拟时钟VCj ,每一个时钟滴答,当前进程k的VCk会重新计算,同时调度器选择VC最小的进程运行,计算方法非常简单:
可见, Linux的CFS简直就是43BSD进程调度的自驱无级变速版本!
如果你想了解CFS的精髓,上面的就是了。换成语言描述,CFS的精髓就是 “ n个进程的系统,任意长的时间周期TT,每一个进程运行T/n的时间! ”
当然,在现实和实现中,会有80%的代码处理20%的剩余问题,比如如何奖励睡眠太久的进程等等,但是这些都不是精髓。
综上,我们总结了:
所以无论从概念还是从效果,Linux CFS调度器均没有带来令人眼前一亮的哇塞效果。但是还缺点什么。嗯,技术上的解释。
分析和解释任何一个机制之前,必然要先问,这个机制的目标是什么,它要解决什么问题,这样才有意义。而不能仅仅是明白了它是怎么工作的。
那么Linux CFS调度器被采用,它的目标是解决什么问题的呢?它肯定是针对O(1)算法的一个问题而被引入并取代O(1),该问题也许并非什么臭名昭著,但是确实是一枚钉子,必须拔除。
O(1)调度器的本质问题在于 进程的优先级和进程可运行的时间片进行了强映射!
也就是说,给定一个进程优先级,就会计算出一个时间片与之对应,我们忽略奖惩相关的动态优先级,看一下原始O(1)算法中一个进程时间片的计算:
直观点显示:
针对上述问题,26内核的O(1)O(1)引入了双斜率来解决:
直观图示如下:
貌似问题解决了,但是如果单单揪住上图的某一个优先级子区间来看,还是会有问题,这就是相对优先级的问题。我们看到,高优先级的时间片是缓慢增减的,而低优先级的时间片却是陡然增减,同样都是相差同样优先级的进程,其优先级分布影响了它们的时间片分配。
本来是治瘸子,结果腿好了,但是胳臂坏了。
本质上来讲,这都源自于下面两个原因:
固定的优先级映射到固定的时间片。
相对优先级和绝对优先级混杂。
那么这个问题如何解决?
优先级和时间片本来就是两个概念,二者中间还得有个变量沟通才可以。优先级高只是说明该进程能运行的久一些,但是到底久多少,并不是仅仅优先级就能决定的,还要综合考虑,换句话距离来说,如果只有一个进程,那么即便它优先级再低,它也可以永久运行,如果系统中有很多的进程,即便再高优先级的进程也要让出一些时间给其它进程。
所以,考虑到系统中总体的进程情况,将优先级转换为权重,将时间片转换为份额,CFS就是了。最终的坐标系应该是 权重占比/时间片 坐标系而不是 权重(或者优先级)/时间片 。应该是这个平滑的样子:
看来,Linux CFS只是为了解决O(1)O(1)中一个 “静态优先级/时间片映射” 问题的,那么可想而知,它又能带来什么惊艳效果呢?这里还有个“但是”,这个O(1)O(1)调度器的问题其实在计算密集型的守护进程看来,并不是问题,反而是好事,毕竟高优先级进程可以 无条件持续运行很久而不切换 。这对于吞吐率的提高,cache利用都是有好处的。无非也就侵扰了交互进程呗,又有何妨。
当然,使用调优CFS的时候,难免也要遇到IO睡眠奖惩等剩余的事情去设计一些trick算法,这破费精力。
对了,还要设置你的内核为HZ1000哦,这样更能体现CFS的平滑性,就像它宣称的那样。我难以想象,出了Ubuntu,Suse等花哨的桌面发行版之外,还有哪个Linux需要打开HZ1000,服务器用HZ250不挺好吗?
关于调度的话题基本就说完了,但是在进入下一步固有的喷子环节之前,还有两点要强调:
在CPU核数越来越多的时代,人们更应该关心 把进程调度到哪里CPU核上 而不是 某个CPU核要运行哪个进程 。
单核时代一路走过来的Linux,发展迅猛,这无可厚非,但是成就一个 *** 作系统内核的并不单单是技术,还有别的。这些当然程序员们很不爱听,程序员最烦非技术方面的东西了,程序员跟谁都比写代码,程序员特别喜欢喷领导不会写代码云云。
Linux在纯技术方面并不优秀,Linux总体上优秀的原因是因为有一群非代码不明志的程序员在让它变得越来越优秀,另一方面还要归功于开源和社区。Linux的学习门槛极低,如果一个公司能不费吹灰之力招聘到一个Linux程序员的话,那它干嘛还要费劲九牛二虎之力去招聘什么高端的BSD程序员呢?最终的结果就是,Linux用的人极多,想换也换不掉了。
但无论如何也没法弥补Linux内核上的一些原则性错误。
Linux内核还是以原始的主线为base,以讲Linux内核的书为例,经典的Robert Love的《Linux内核设计与实现》,以及《深入理解Linux内核》,在讲进程调度的时候,关于多核负载均衡的笔墨都是少之又少甚至没有,如此经典的著作把很多同好引向了那万劫不复的代码深渊。于是乎,铺天盖地的CFS源码分析纷至沓来。
但其实,抛开这么一个再普通不过的Linux内核,现代 *** 作系统进入了多核时代,其核心正是在cache利用上的革新,带来的转变就是进程调度和内存管理的革新。review一下Linux内核源码,这些改变早就已经表现了出来。
可悲的是,关于Linux内核的经典书籍却再也没有更新,所有的从传统学校出来的喜欢看书学习的,依然是抱着10年前的大部头在啃。
>
clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。
它的具体功能是返回处理器调用某个进程或函数所花费的时间。函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,其中clock_t是用来保存时间的数据类型。
在timeh文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
clock_t其实就是long,即长整形。该函数返回值是硬件滴答数,要换算成秒或者毫秒,需要除以CLK_TCK或者 CLK_TCK CLOCKS_PER_SEC。比如,在VC++60下,这两个量的值都是1000,这表示硬件滴答1000下是1秒,因此要计算一个进程的时间,用clock()除以1000即可。
clock的返回值一直是0的原因:
1、编译器优化,for循环实际根本没执行,直接跳过去了,所以时间为0。
2、clock计算的是程序占用cpu的时间,如果你的程序执行的动作很少,那么clock算出的时间也很少。
3、建议使用time gettimeofday函数来计时。
扩展资料:
C语言中clock()函数的程序例1:(TC下运行通过)
#include <stdioh>
#include <timeh>
int main(void)
{
clock_t start, end;
start = clock();
delay(2000);
end = clock();
printf("The time was: %f\n", (double)(end - start) / CLK_TCK);
return 0;
}
说明:CLK_TCK 定义在TC中的timeh中:#define CLK_TCK182。
在VC60中也有关于CLK_TCK的宏定义,不过其值不再是182,而是1000。
实际上在VC60中CLK_TCK已完全等同CLOCKS_PER_SEC。
参考资料来源:百度百科-clock()
高性能计算(HighPerformanceComputing)是计算机科学的一个分支,主要是指从体系结构、并行算法和软件开发等方面研究开发高性能计算机的技术。
随着计算机技术的飞速发展,高性能计算机的计算速度不断提高,其标准也处在不断变化之中。
高性能计算简单来说就是在16台甚至更多的服务器上完成某些类型的技术工作负载。到底这个数量是需要8台,12台还是16台服务器这并不重要。在定义下假设每一台服务器都在运行自己独立的 *** 作系统,与其关联的输入/输出基础构造都是建立在COTS系统之上。
简而言之,讨论的就是Linux高性能计算集群。
一个拥有20000台服务器的信息中心要进行分子动力学模拟无疑是毫无问题的,就好比一个小型工程公司在它的机房里运行计算流体动力学(CFD)模拟。解决工作负载的唯一限制来自于技术层面。接下来我们要讨论的问题是什么能直接加以应用。
量度(Metrics)
性能(Performance),每瓦特性能(Performance/Watt),每平方英尺性能(Performance/Squarefoot)和性能价格比(Performance/dollar)等,对于提及的20000台服务器的动力分子簇来说,原因是显而易见的。运行这样的系统经常被服务器的能量消耗(瓦特)和体积(平方英尺)所局限。这两个要素都被计入总体拥有成本(TCO)之列。在总体拥有成本(TCO)方面取得更大的经济效益是大家非常关注的。
议题的范围限定在性能方面来帮助大家理解性能能耗,性能密度和总体拥有成本(TCO)在实践中的重要性。
性能的定义
在这里把性能定义为一种计算率。例如每天完成的工作负载,每秒钟浮点运算的速度(FLOPs)等等。接下来要思考的是既定工作量的完成时间。这两者是直接关联的,速度=1/(时间/工作量)。因此性能是根据运行的工作量来进行测算的,通过计算其完成时间来转化成所需要的速度。
定量与定性
从定性的层面上来说这个问题很容易回答,就是更快的处理器,更多容量的内存,表现更佳的网络和磁盘输入/输出子系统。但当要在决定是否购买Linu集群时这样的回答就不够准确了。
对Linux高性能计算集群的性能进行量化分析。
为此介绍部分量化模型和方法技巧,它们能非常精确的对大家的业务决策进行指导,同时又非常简单实用。举例来说,这些业务决策涉及的方面包括:
购买---系统元件选购指南来获取最佳性能或者最经济的性能配置---鉴别系统及应用软件中的瓶颈
计划---突出性能的关联性和局限性来制定中期商业计划
Linux高性能计算集群模型包括四类主要的硬件组成部分。
(1)执行技术工作负载的计算节点或者服务器;
(2)一个用于集群管理,工作控制等方面的主节点;
(3)互相连接的电缆和高度普及的千兆以太网(GBE);
(4)一些全局存储系统,像由主节点输出的NFS文件一样简单易用。
高性能计算机的衡量标准主要以计算速度(尤其是浮点运算速度)作为标准。高性能计算机是信息领域的前沿高技术,在保障国家安全、推动国防科技进步、促进尖端武器发展方面具有直接推动作用,是衡量一个国家综合实力的重要标志之一。
随着信息化社会的飞速发展,人类对信息处理能力的要求越来越高,不仅石油勘探、气象预报、航天国防、科学研究等需求高性能计算机,而金融、政府信息化、教育、企业、网络游戏等更广泛的领域对高性能计算的需求迅猛增长。
一个简单量化的运用模型
这样一个量化的运用模型非常直观。在一个集群上对既定的工作完成的时间大约等同于在独立的子系统上花费的时间:
e
1、时间(Time)=节点时间(Tnode)+电缆时间(Tfabric)+存储时间(Tstorage)
Time = Tnode + Tfabric + Tstorag
这里所说的时间(Time)指的是执行工作量的完成时间,节点时间(Tnode)是指在计算节点上花费的完成时间,电缆时间(Tfabric)是指在互联网上各个节点进行互联的完成时间,而存储时间(Tstorage)则是指访问局域网或全球存储系统的完成时间。
计算节点的完成时间大约等同于在独立的子系统上花费的时间:
2、节点时间(Tnode)=内核时间(Tcore) +内存时间(Tmemory)
这里所说的内核时间(Tcore)指的是在微处理器计算节点上的完成时间。而内存时间(Tmemory)就是指访问主存储器的完成时间。这个模型对于单个的CPU计算节点来说是非常实用的,而且能很容易的扩展到通用双插槽(SMP对称多处理)计算节点。为了使第二套模型更加实用,子系统的完成时间也必须和计算节点的物理配置参数相关联,例如处理器的速度,内存的速度等等。
计算节点
图示中的计算节点原型来认识相关的配置参数。图示上端的是2个处理器插槽,通过前端总线(FSB-front side bus)与内存控制中心(MCH)相连。这个内存控制中心(MCH)有四个存储信道。同时还有一个Infiniband HCA通过信道点对点串行(PCIe)连接在一起。
像千兆以太网和串行接口(SATA)硬盘之类的低速的输入输出系统都是通过芯片组中的南桥通道(South Bridge)相连接的。在图示中,大家可以看到每个主要部件旁边都用红色标注了一个性能相关参数。这些参数详细的说明了影响性能(并非全部)的硬件的特性。它们通常也和硬件的成本直接相关。举例来说,处理器时钟频率(fcore)在多数工作负荷状态下对性能影响巨大。根据供求交叉半导体产额曲线原理,处理器速度越快,相应成本也会更高。
高速缓存存储器的体积也会对性能产生影响,它能减少主频所承载的工作负荷以提高其运算速度。处理器内核的数量(Ncores)同样会影响性能和成本。内存子系统的速度可以根据双列直插内存模块频率(fDIMM)和总线频率(fBus)进行参数化,它在工作负荷状态下也对性能产生影响。同样,电缆相互连接(interconnect fabric)的速度取决于信道点对点串行的频率。
而其他一些因素,比如双列直插内存模块内存延迟(DIMM CAS Latency),存储信道的数量等都做为次要因素暂时忽略不计。
使用的性能参数
在图示中标明的6个性能参数中,保留四个和模型相关的参数。
首先忽略信道点对点串行的频率(fPCIe),因为它主要影响的是电缆相互连接(interconnect fabric)速度的性能,这不在范围之列。
接下来注意一下双列直插内存模块频率(fDIMM)和总线频率(fBus)会由于内存控制中心(MCH)而限于固定比率。
使用的双核系统中,这些比率最具代表性的是4:5, 1:1, 5:4。一般情况下只会用到其中的一个。高速缓存存储器的体积非常重要。
在这个模型中保留这个参数。内核的数量(Ncores)和内核频率(fcore)也非常重要,保留这两个参数。
高性能计算(HPC)模型
这第二个模型的基本形式在计算机体系研究领域已经存在了很多年。
A普通模式是:
(3) CPI = CPI0 + MPI PPM
这里的CPI指的是处理器在工作负荷状态下每执行一个指令的周期。CPI0是指内核CPI,MPI I则是指在工作负荷状态下高速缓存存储器每个指令失误的次数(注释:在高性能计算领域,MPI主要用于信息传递界面,在此处主要是指处理器构造惯例),PPM是指以处理器时钟滴答声为单位对高速缓存存储器每个指令失误的次数的记录。第二和第三个方程式相互吻合。这第一个术语代表的是处理器,第二个术语代表的是内存。
可以直观的看到,假设每项工作下执行的P指令的工作负荷与代表处理器的频率的内核频率(每秒钟处理器运行周期的单位)再与方程式(3)相乘,就得到了方程式(4):
Tnode = (CPIo P) (1 / fcore) + (MPI P) PPM (1 / fcore)
在这里要注意(CPIo P)是以每项工作分配下处理器的运行周期为单位,对微处理器架构上运行的既定工作负荷通常是个恒量。因此把它命名为α。(处理器周期本身无法对时间进行测算,如果乘以内核的频率就可以得到时间的测算标准。因此Tnode在方程式(4)的右边)。
(MPI P)也是同理。对于既定工作负荷和体系结构来说它也是个恒量,但它主要依赖于高速缓存存储器的体积。我们把它命名为M(MBcache)。而PPM是指访问主存的成本。对于既定的工作负荷来说,通常是个固定的数字C。PPM乘以内存频率和总线频率的比值(fcore / fBus)就从总线周期(bus cycles)转化成了处理器周期。因此PM = C fcore / fBus。套入M(MBcache)就可以得到:
(5) Tnode = α (1 / fcore) + M(MBcache) (1 / fbus)
这个例子说明总线频率(bus frequency)也是个恒量,方程式(5)可以简化为方程式(6):
(6) Tnode = α (1 / fcore) + β
在这里Tcore = α (1 / fcore),而Tmemory = β(也就是公式2里的术语。我们把这些关键点关联在一起)。
首先在模型2里,公式5和公式6都有坚实的理论基础,因为经分析过它是如何从公式3推理而来(它主要应用于计算机体系理论)。其次,这个模型4个硬件性能参数的3个已经包括其中。还差一个参数就是内核数量(Ncores)。
用直观的方式来说明内核的数量,就是假设把N个内核看做是一个网络频率上运行的一个内核,称之为Nfcore。那么根据公式(6)我们大致可以推算出:
(7) Tcore ~ α / (Nfcore)
Tcore~ ( α / N) (1 / fcore )
也可以把它写成:
(8) αN = ( α / N)
多核处理器的第一个字母Alpha可能是单核处理器的1/N次。
通过数学推算这几乎是完全可能的。
通常情况下我们是根据系统内核和总线频率(bus frequencies)来衡量计算机系统性能,如公式(5)所阐述的。但是公式(5)的左边是时间单位--这个时间单位指的是一项工作量的完成时间。这样就能更清楚的以时间为单位说明右侧的主系统参数。同时请注意内核的时钟周期τcore(是指每次内核运行周期所需的时间)也等同于(1 / fcore)。总线时钟(bus clock)周期也是同理。
(9) Tnode = αN τcore + M(MBcache) τBus
这个公式的转化也给了一个完成时间的模型,那就是2个基本的自变量τcore和τBus呈现出直线性变化。这对使用一个简单的棋盘式对照表对真实系统数据进行分析是有帮助的。
1、蒲公英那优美的小精灵,在天空中飞舞,如雪花般消失在了天际
2、一颗种子,一阵微风,就能营造一片蒲公英的灿烂
3、蒲公英是我所见过的最奇特的花朵,并不是多么奔放,也不是特别清秀,甚至吹散了只是惹人4、打喷嚏的毛茸茸的东西,可是在空中轻盈舞动的蒲公英,就是能触动人心中最柔软的地方
5、蒲公英的种子靠风来传播,只是借助那么小小的力量就得以繁衍生息,它大概也是唯一能够飞翔的花了吧
6、平常蒲公英只是在每一个角落安静的,谦卑的观察世界,不管谁要带它走都决不反抗,没有用花刺和毒汁来防御别人,这是对世界多么彻底的爱
7、蒲公英也有激情迸发的时候,大片的蒲公英飞舞在空中,象会飞的雪花,象飘低的云朵,联想大幅涌来,这是否是天女在微服出巡
8、风越长久,蒲公英飞的越远,无论是多麽偏僻的地方,多么荒凉的地方,蒲公英都愿意留在那里,这是对世界多么无私的爱
9、蒲公英繁育的后代,各自起程,飘向更远的地方,这是对世界多么广阔的爱
就是这样无穷无尽的奉献,就是那样飘翔在天际,不在乎世人的眼光是否在它们身上,只是到每一个角落去,把根留住
10、安静的等待,洒脱的飞翔,随遇而安的气度,安贫乐道的生活,蒲公英就象冰山下的火种,外表清冷孤傲,内在热血奔腾
以上就是关于C语言 关于sound();函数和delay();全部的内容,包括:C语言 关于sound();函数和delay();、谁能告诉我 linux下select函数到底是干什么用的 貌似我不用它也可以得到我想要的结果啊 、bstrVal是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)