能力值:
( LV8,RANK:130 )
2 楼
13.B 14.A 15.B
13就不多说了。
14。线程就是为了并行性,在单CPU上实际上是没法并行的,只是让人感觉像是几个软件同时在运行。只有在多核的计算机上才可能实现真正的并行,这当然也需要操作系统的支持。
线程对可靠性反而是个挑战,软件处理不当很容易崩溃。一直到.NET 2都有线程处理上的bug,平时编程时比较头痛的就包括对多thread程序的调试,不管是在windows还是在Linux上。
很多人一上来就写multi-thread的程序,不管是不是真的需要。至少在单核的Windows机器上,多线程的程序引起的系统开销是很大的。你每创建一个thread,系统就得调用该process里面所有DLL的DllMain()一遍。系统每一次thread切换,该休息的thread的数据(kernel object,stack --- user mode and kernel mode)都得保存,由此引起的内存page fault和相应的disk I/O是很惊人的。还不提你得花在线程同步上的功夫和效果。所以要慎用。 15。如果是考试题,这个老师该打屁股。先来先服务是早期操作系统调度进程的常用办法,比如Windows 3.1;从95开始就是round robin的法子了。
1) 每个thread的quantum大概是20ms
2) quantum的原理可参考:
f3dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8Q4x3V1j5#2i4K6u0r3j5W2)9J5c8U0y4Q4x3V1j5#2j5U0x3^5z5o6l9H3j5#2)9J5k6r3u0S2y4X3g2Q4x3X3b7@1x3o6t1K6i4K6u0V1z5e0l9%4z5q4)9J5k6o6k6W2z5h3y4W2x3U0x3^5x3$3f1$3y4g2)9J5c8V1x3H3y4W2R3I4x3e0p5$3y4U0l9%4i4K6u0W2M7r3c8X3
3) sleep(10)可以让系统保证你的thread最少睡上10ms
4) 在task manager里右键选择一个process,“set Affinity”可以让系统把你的thread绑定到某个CPU上去运行,对应的API是SetThreadAffinityMask()。
5)2000/XP/2003:thread的优先级(priority)一般有32级(0到31),在task manager里你可以设定你的thread的优先级为real time(31),但系统内部从来就是不理睬,当成15(普通)来看待。