单线程和多线程的区别?

来源:互联网 发布:工作日志记录软件 编辑:程序博客网 时间:2024/04/30 14:36

通常多线程的应用不是为了提高运行效率,而是为了提高资源使用效率。比如你的应用程序需要访问网络,因为网络有延时,如果在界面线程访问,那么在网络访问期间界面将无法响应用户消息,这是就应该使用多线程。  
   
  如果是单CPU,而且程序使用的资源仅仅是在内存和CPU,从运行指令上比较肯定单线程要比多线程精简;时间的话,理想状况可以认为单线程要比多线程时间短,但是实际情况很难讲,因为Windows下是多任务的,每一时刻CPU的使用情况都有不同;程序代码经过编译器编译也可能是优化过的;CPU对Cache的命中率也是随机的。所以精确的比较其实很难实现。   

     个人理解  
   
  单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。  
   
  多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息   花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。   而如果用多线程就可以在等待期间   加入其他的搜索,然后等待,这样可以提高效率。  
   
  不过多线程和多进程公用一些资源时要考虑的问题好像也是一样的,,对于一些公共资源或者公共变量的访问和修改时要注意特别的,   需要一些锁定什么的,还有顺序问题的考虑。  
   
  比如写游戏,一开始想来,用多线程蛮好的,   一个敌人一个线程让他自己单独运行,可以增加灵活性和随机性还有速度会快些?   其实不然,   一方面线程多了   速度会变得很慢,   另一方面由于线程切换和执行的不确定性,会使结果变得乱七八糟,跳来跳去的感觉?,特别是一些碰撞判断时,会莫名其妙?  
  (我没试过,以前听人说试过)   。   其实处理这些东西用一个流程下来顺次处理主角、敌人、碰撞判断、绘图,速度方面不会怎么慢,而且一些变量判断方面不会错位。  
   
  说了半天,也没具体说出些什么,不好意思。  
   
   
  如果你学过操作系统,应该用好理解一点,线程的同步问题呵呵。。 

原创粉丝点击