单线程和多线程的区别?
来源:互联网 发布:工作日志记录软件 编辑:程序博客网 时间:2024/04/30 14:36
通常多线程的应用不是为了提高运行效率,而是为了提高资源使用效率。比如你的应用程序需要访问网络,因为网络有延时,如果在界面线程访问,那么在网络访问期间界面将无法响应用户消息,这是就应该使用多线程。
如果是单CPU,而且程序使用的资源仅仅是在内存和CPU,从运行指令上比较肯定单线程要比多线程精简;时间的话,理想状况可以认为单线程要比多线程时间短,但是实际情况很难讲,因为Windows下是多任务的,每一时刻CPU的使用情况都有不同;程序代码经过编译器编译也可能是优化过的;CPU对Cache的命中率也是随机的。所以精确的比较其实很难实现。
个人理解
单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。
多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息 花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。 而如果用多线程就可以在等待期间 加入其他的搜索,然后等待,这样可以提高效率。
不过多线程和多进程公用一些资源时要考虑的问题好像也是一样的,,对于一些公共资源或者公共变量的访问和修改时要注意特别的, 需要一些锁定什么的,还有顺序问题的考虑。
比如写游戏,一开始想来,用多线程蛮好的, 一个敌人一个线程让他自己单独运行,可以增加灵活性和随机性还有速度会快些? 其实不然, 一方面线程多了 速度会变得很慢, 另一方面由于线程切换和执行的不确定性,会使结果变得乱七八糟,跳来跳去的感觉?,特别是一些碰撞判断时,会莫名其妙?
(我没试过,以前听人说试过) 。 其实处理这些东西用一个流程下来顺次处理主角、敌人、碰撞判断、绘图,速度方面不会怎么慢,而且一些变量判断方面不会错位。
说了半天,也没具体说出些什么,不好意思。
如果你学过操作系统,应该用好理解一点,线程的同步问题呵呵。。
- 单线程和多线程的区别?
- java单线程和多线程的区别
- 单线程、多线程的区别
- 多线程与单线程的区别
- 单线程与多线程的区别
- 单线程与多线程的区别
- 单线程和多线程
- 单线程和多线程
- 单线程和多线程
- 单线程和多线程的优缺点
- 多线程与单线程区别
- 多线程和单线程有什么本质区别
- 进程、单线程和多线程
- python 单线程和多线程
- 单线程和多线程//笔记
- java的单线程,多线程
- “多线程IO”和“单线程异步IO”的对比
- 单线程服务器和多线程服务器的常用编程模型
- Linux的引导过程剖析
- 一些难打的字的五笔编码
- 呵呵,加了三角星
- 显示新闻列表中的数据控件中加入新闻类别名称的列
- formclosing的写法
- 单线程和多线程的区别?
- ASP连接数据库几种方式
- 在.net中需要向多个网页(多个form表单)投递数据时
- 今天开博啦
- 传奇源码分析-序言
- 加载页面时自动打开另一个新页面的并同时打开一个exe程序
- c#中结构与类的区别
- Java正则表达式详解
- 玩玩Spring之hibernate+ webwork+ spring添删改查示例