多线程同步了,运行效率是否就等效于单线程?

解决方案 »

  1.   

    单核的话,
    必然更差的。多核CPU下的话,可能 优化上来的 效率 - 同步的消耗。加速比 < 1 ......
      

  2.   

    那要看你的线程是做什么的,以及是如何同步的,和你的程序架构也有很大关系。
    在某些情况下,它和单线程差不多,甚至还差,比如:
    有两个线程A、B,都在自己的线程中对同一个变量进行加1操作,比如A只有对偶数加1,而B只有对寄数加1,你再做同步,这种线程肯定很差了。
    当然,没有专门的线程会做这样的傻事,所以一般情况下都会比单线程效率要高,至于高多少,就要看各种情况了。比如:
    两个线程A、B,它们里面都有一个很大的循环来做自己的事情,但是在进入到这个循环之前,两个线程都有一个同步操作的过程,比如都要同步对某一变量进行加1操作,然后才进入到自己的循环中,这样,多线程显示比单线程要来的快。当然,如果你是在单核上,可能差不多,如果是在多核上,效率应该就有明显的区别了
      

  3.   

    同意
    感觉开发程序不能为了多线程而多线程,完全要看具体情况
    单核的话
    如果你线程要进行tcp链接,同时进行一个复杂运算,你就不会用单线程了吧,难道你打算等tcp完全链接好了再进行计算?开两个线程,一个线程管理tcp链接,一个进行计算。tcp链接要3次握手,中间等待确认的空隙,另一个线程进行复杂运算,显然省时间
    如果你的线程是纯用来计算的,显然单线程更好,多线程的线程间频繁切换是非常耗时的!
    多核的话
    如果你要进行的计算,理论上能证明多核并行的优化无意义,你开再多线程又有什么用?
      

  4.   

    看做什么用, 有时候>, 有时候<
      

  5.   

    真不知道大家是怎么学的操作系统的,居然有人说多线程更差!!
    多核的cpu是最近几年才出现的,但是操作系统早就是以多线程的方式运行了(或者说多进程)!!
    是通过进程间的(线程间)的相互调度才实现了多任务的!线程是更轻的,几乎不占用资源(只是一小部分必须的资源),所以线程间的转换是更容易的!!
      

  6.   

    理论上当然单线程最快了,在单CPU上,但实际上需要处理的运算不会很多的,可能感觉不出来,但多线程的优势就体现出来了
      

  7.   

    这位兄弟出来搞笑的吧线程间切换别进程间切换是容易很多,那就说明他不耗资源了吗?占的资源多不多,你可以自己测试再来发表言论。
    纯粹是数学运算的程序,用单核跑,cpu100%,花个20秒;你把程序写为多线程的试试,比较下所花的时间多线程,要么就为了提高CPU使用率,就像上面兄弟举例说的网络通信时;要么设计需要方便管理,比如你自己写个服务器,每个链接过来的用户你给他一个线程来处理。按你的逻辑难不成什么你都要做成多线程的?就算你同步做得非常细,但只要需要同步的地方,必定存在一个线程等待另一个线程的情况,必然降低运行效率。感觉这个问题完全没有讨论的意义,还不如大家来讨论下什么时候用多线程好,什么时候用单线程好
      

  8.   

    我晕……这要看你怎么定义运行效率
    拿Http来说,浏览器下载一个网页要向服务器请求资源,一个网页可能包含若干个资源,比如好几张图片。当Http工作在无状态模式的时候,每请求一次服务器就自动关闭套接口。所以如果网页有n个资源,用单线程的浏览器要用n×rtt的时间才能打开网页,但用多线程只要稍大于一个rtt时间就行了。
    所以不要为了多线程而多线程,要看你干什么
      

  9.   

    hui tie dei ke yong fen
      

  10.   

    多线程序能使进程抢来更多的时间片,但是多线程在切换的时候也消耗了不少的时间片.
    评价其跟单线程的好坏只能视实际应用的情况而定.
    建议楼主看看Windows核心编程的多线程才来思考这个问题,
    这样你才懂得多线程序存在的必要.