多线程,主要是想提高程序的可伸缩性。例如,有很多任务需要并行进行,那么可能需要多线程。
多线程实际上是一个假象,就是说,因为CPU的时间总是有限的,那么CPU需要频繁地切换,在某个时间执行某个线程的任务。这种情况,如果用的不好,反而增加了CPU的负担,降低了系统性能
多线程实际上是一个假象,就是说,因为CPU的时间总是有限的,那么CPU需要频繁地切换,在某个时间执行某个线程的任务。这种情况,如果用的不好,反而增加了CPU的负担,降低了系统性能
解决方案 »
- 看谁写得速度最快---C#的多线程复制文件夹
- static的不恰当应用?我到底错在哪里了?
- 请问c#能否实现根据从数据库中查询出的数据,绘制出简单的棒状图,曲线图等
- 请教WINFORM中使用DATABINGS属性
- 用工厂模式来解决switch...case...语句
- ultrawebgrid 如何实现打印功能
- 小白问题,在使用安装项目时,生成包含一个.cab文件,怎么合并一起?
- c# 中怎么把richtextbox中有图片和文字的一起保存进数据库?又怎么从数据库sql2008中读出来,读出来显示的内容排列要和保存时一样。比如:内容+
- asp.net 操作 excel的问题
- 微软网站下载TreeView控件在什么目录下?
- 谁能帮我看下和修改程序
- 求一个c# 局域网语音聊天的实例
我不这样认为,合理的分配CPU的时间和空间负载,恰恰可以大幅提高性能,
问题是:绝大多数开发者对于并发场景的分析能力非常弱,
仅仅是个单据流水号的连号要求,就可以让很多开发人员想不明白,
而处理并发不当轻则造成宕机,重则造成数据丢失或误操作,
我认为这才是多线程的风险
1、如梦的意思是多线程会产生的性能风险(我并没有反对);
2、我觉得这并不是关键的风险(不是没有风险),这可以通过测试评估摸索出"合理分配CPU
时间和空间负载"的方案来达到提高性能的目的;
3、我认为最关键的是风险是“并发”,这个风险涉及的面很广,而且可能导致严重的损失。请指教,谢谢
我認為當一個程式通過所有測試後, 風險應已經降到最低
最麻煩的事是debug的過程, 解決數據是否同步的問題
你说的没错,我也不想继续说你对如梦到底是否理解了。呵呵,钻牛角尖了。他之想说多线程并非总能提高效率。当然你说的没错。但这和题目貌似无关,楼主只是开玩笑问问多线程如何实现。以及哪种语言效率高。就这个问题的答案:
显然和语言无关,而效率也不是多线程就一定快(如梦就这个意思)。
并发当然要考虑。只是跑题了而已。呵呵。
--------------------------------------------------------------------------------
多线程,什么叫多线程,一个进程,入口是main,这个main就是运行的线程,多线程就是同时多个方法在执行。这个和语言哪有关系?c++:CreateThread
c#:new Thread(()=>MessageBox.Show("yeah")).Start()
vb.net:
dim th as new Thread(Sub () MessageBox.Show("yeah"))
th.start()你说写哪个速度快?估计只和打字速度有关。
多线程是操作系统的概念,和语言无关。vb6也可以用api:CreateThread,c++也可以用CreateThread
.net的new Thread底层也是调用CreateThread
你说得对啊,执行上是这样的.我是以为楼主说的是生产效率,
因为我们只有C#下的架构,没有涉及到java的方面,
所以没有正面回复,
只是讨论一下多线程的并发风险
之前都说过最花开发时间的是解决同步的问题
生thread的过程, 每种text-based语言都是差不多
把握一个原则,对公用的,可能导致相互等待的资源进行互斥。互斥的方式也无外呼三种:
临界区,互斥题,信号量
临界区不知道.net如何用。另外2个就是mutex和lock/monitor并发冲突是现象,解决方法是找一个标志,让需要访问资源的线程逐个的来查看这个标志,因为非寄存器的标志本身就可能并发冲突。所以要用特殊变量。根据访问的范围,有分类出mutex(进程间互斥,当然也可以用于线程互斥),lock是monitor.enter,monitor.exit的简写。这个用于线程互斥。当并发变得不可避免的时候,为了系统不要死锁,就加入等待超时,如果超时,大不了等待的线程都放弃操作,下次再重新抢资源。
概念的确简单, common sense的东西似的.
但实作用的开发时间的确比单线程为长, 你试试看便知
不同程式语言类型会对开发时间有影响, 你试看数据流方式的程式语言便知道了