首页 > 代码库 > 读书问题之《编程之美》 -----12061161 赵梓皓
读书问题之《编程之美》 -----12061161 赵梓皓
我阅读的书是《编程之美》
刚开始的时候阅读序,就觉得控制cpu利用率这个问题很好玩,所以重点看了这部分和解决办法,问题也都大部分是这部分的。那么问题就来了(挖掘机技术xxx?中国山东找蓝翔)
咳咳,问题在下面:
1.关于问题的提出。(也是一点点建议)
本书的主要内容是告诉读者如何思考问题和解决问题。但是提出问题也是很重要的,正如爱因斯坦所说“提出一个问题往往比解决一个问题更重要”,很多面试题(比如井盖为啥是圆的)我觉得正常人很少会想到。所以,这个问题是怎么想出来的。。。我很好奇。也希望作者能够稍微讲讲。
2.书中第8页降到用gettickcount()来计算busy loop的循环时间。讲到能够统计的时间是49.7天。为什么最大值是49.7。这个数字有什么特殊含义。
百度后发现很多49.7天的相关问题。。比如西门子200强大的定时器最长可达49.7天!!
为啥也是49.7????
好像是32位数到49.7天会溢出。
计算一下
49.7天 = 4294080000毫秒
32位数的最大值= 4294967296
差不多 啊哈哈哈。。。。
然后在自己的电脑上试着用一下这个函数
代码:
#include <iostream>
#include <windows.h>
#include <WinBase.h>
#include <ctime>
using namespace std;
int main()
{
cout << GetTickCount() << endl;
system("pause");
}
结果: 大概3小时。。。合理
问题解决。
3.本书解法一中用sleep来解决cpu空闲时间。
那么,cpu到底在sleep的这段时间在干嘛?
而且,根据操作系统学的进程调度算法,有没有可能在执行这段程序的另一个时间片调度给了另一个进程。
我搜索了一下sleep cpu干什么。。。发现其实作者书中已经提到,但没有说清楚。
进入Sleep的是线程,不是CPU。
如果没有可用的用户进程了,就会执行 System Idle Process ,这个进程一般就是收集一些数据。
那这个进程到底是干吗的?它所干的事情会不会影响到我们要求的“cpu曲线”
百度百科:Windows页面内存管理进程,拥有0级优先;该程序使用Ctrl+Alt+Del打开,该进程作为单线程运行在每个处理器上,并在系统不处理其他线程的时候分派处理器的时间。它的cpu占用率越大表示可供分配的CPU资源越多,数字越小则表示CPU资源紧张。该进程是系统必须的,不能禁止。
实际上System IdleProcess 是WIN2000/XP以及Vista/WIN7操作系统都有的一个进程,其作用都是一样的。就是在CPU空闲的时候,发出一个IDLE命令,使CPU挂起(暂时停止工作),可有效的降低CPU内核的温度,在操作系统服务里面,都没有禁止它的选项;默认它是占用除了当前应用程序所分配的处理器(CPU)百分比之外的所有占用率;
问题解决。
4.既然能够控制cpu的利用率,那能不能够控制内存的使用率。更进一步能不能控制网速的函数变成一个正弦曲线,或者能不能控制usb的速度变成一个特殊曲线。
解决这个问题需要很多专业知识。。。而且网上也搜不到,求大神解答。
5.这个问题是关于煎饼的问题(怎么写着写着有点饿了。。。。)。书中21页写到可能使用动态规划的方法来解决。但是最后却给出了解决最优化问题普遍适用但效率可能是最差的递归方法。那为什么不是使用动态规划或贪心算法呢?
转自某人博客:
对于这个问题,某个子问题的最优解不一定是整体的最优解,所以我们在处理整个问题的时候,需要遍历所有可能的子问题,并计算它到整体问题所消耗的代价,才能最终作出有利于整体问题的选择。
所以我们一开始的假设,即烙饼问题有优化子结构的假设是错误的。因此我们不能用动态规划,同理也不能用贪心算法。
问题就先写这么多,我要去玩电梯了(说实话:是xxx的被电梯玩(┬_┬))
读书问题之《编程之美》 -----12061161 赵梓皓