就性能方面我认为是 无阻塞(包括IO阻塞,同步阻塞等)就不要用多线程,不然比单线程还慢。
关于单核和多核的考虑 有些人可能认为  多核的情况下多线程能提高性能
但单线程在多核下就是用的单CPU吗?答案是非也,自己写个单线程在多核下运行试试就知道了欢迎大家讨论

解决方案 »

  1.   

    楼主所说多核 运行单线程 的不同 在于结果不同 处理机制没有变化 CPU等待调度的时间不同了多核运行 多线程 在cup调度的机制不同 结果也不同 这两者的不同 是不能平级看待
    个人意见 绿绦工作室
      

  2.   

    无论是java还是什么,只要是有线程,就有调度开销,这是毋庸置疑的。所以,仅仅讨论多线程的性能,感觉意义不大。如果要从1数到100000000,那么单线程肯定比多线程快啊。多线程,是干啥用的呢?
    说白了,说到底,是为了简化编程模型。
      

  3.   


    楼主啊,只要涉及I/O基本上就存在阻塞,因为还没有哪个I/O的速度能够比上CPU。
    所以,从CPU的角度来看,除了寄存器,其它的都是I/O,都是外设,
    内存都不能例外。所以老紫竹说的很对,在不讨论任何阻塞的情况下,讨论这个问题意义不大。楼主啊,你再说说你讨论这个问题的意义吧,
    因为如果不考虑阻塞的话,可能真的只剩下数数这件事儿可作了。
      

  4.   

    接分也还是有意义的。如果按楼主的意思,我只能说各自有其生存的理由,既然没必要用那就表示它本来就不是为其而生的。因为不是所有的东西都只从技术方面去了解,很多时候我们是为了解决某类特定的问题而提出新的设想,甚至有些时候API里面都写下了设计约定(为了这样写而不那样写),而没有说这个设想/编程模型是万能的,你的想法我也赞成,比如像数数确实没必要用多线程,因为做这样简单的算术运算的时间猜测比较线程切换还要少吧(还从没观察过呢,不知道用什么工具观测)?
      

  5.   


    IO操作一定阻塞的观点,我不赞同
    IO确实比CPU慢很多,但只是从相同的处理量来说
    如果IO只是读一条数据,而CPU需要复杂的元素按操作这种情况呢。
    (考虑问题要全面,刘易斯跑百米是比我快,但他跑1000米,我跑100米呢,谁先到终点?)所谓阻塞,我的理解就是供不应求。
    再例如CPU运算做生产者,IO操作作消费者的情况,这样也可能不会阻塞。
      

  6.   

    PS:而CPU需要复杂的元素按操作这种情况呢-----》而CPU需要复杂的运算操作这种情况呢
      

  7.   

    初学java好多都不懂,大家都是大虾啊
      

  8.   


    阻塞就是因为速度不匹配引起的,涉及到I/O,必定有阻塞,这基本上是毫无疑问的,
    除非有一种I/O能够和计算机的总线速度完全匹配。你说“再例如CPU运算做生产者,IO操作作消费者的情况,这样也可能不会阻塞。 ”,
    怎么可能,CPU每秒产生1000M数据,I/O怎么消费,怎么可能不阻塞,
    只是这里阻塞的不是I/O,是把CPU阻塞了,
    而这时候不用多线程,那么CPU的计算能力就白费了,只能屈尊到I/O的速度。而另一方面,
    无论CPU做多么复杂的处理动作,处理完以后,你必定要去I/O读取下一个数据,或者通过I/O存数据,
    在这一刻,无论读/存数据花10MS还是1MS,
    总之,这时候,CPU就是在等待,这就是阻塞。怎么才能不阻塞呢?
    那就是在CPU还正在处理的时候,就把数据读出来,
    ok,这时候,其实就是多线程了,一个线程在运算,另一个线程在读数据。