服务器里有1个数据,有1000个用户只需要读取它,而不需要修改它。
那么,从响应时间及服务器CPU利用率考虑,我该创建1000个线程让它们并行读取好,还是放在一个线程里让它们串行读取好呢?改变一下条件,假设服务器里有10个数据,有1000个用户需要读取10中的任意1个数据,这时哪种方法更好?

解决方案 »

  1.   


    为什么呢?这是我的推断,你看看哪儿有问题:假设读取内存中的一块数据所用时间为t,1000次串行读取的时间即为1000t。
    当并行读取时,虽然CPU同时发出多个取内存指令,但数据总线无法同时传输多块数据,还是得以串行方式一块块传递给CPU,所以所用时间也至少为1000t。
    所以,在内存数据存取方面,或者说在对CPU外的设备的操作方面,CPU的并行处理并不会减少时间开销。
      

  2.   

    这个不是绝对的。CPU给每个线程2个毫秒的时间。每次执行你的线程只有2毫秒,接着CPU就为其他进程的线程服务了。
    照我这个理论,就是越多开越好。但是因为开线程也需要系统资源的。线程资源同步整和也需要时间的。
    所以就不一定了。这效率本身就是是一个弧形曲线。所以要根据用户数量和线程来平衡。所以不是绝对的
      

  3.   

    这个不确定因素比较多
    数据一般是在虚拟内存里,需要MMU转换,可能读物理内存,也可能直接读CPU缓存
    多线程可以在访问总线前尽可能地做一些预处理指令(MMU转换)
    不过线程切换也要一定开销一般是根据CPU(核)数来开线程池,而不是1000个用户就1000个线程
    另外,没必要在这里作无谓的优化,性能瓶颈不在这里。