关于同步执行?(100分)

  • 主题发起人 主题发起人 dana
  • 开始时间 开始时间
D

dana

Unregistered / Unconfirmed
GUEST, unregistred user!
在线程中执行到vcl是否一定要使用同步,
同步也就是让主线程执行,那么在同步中创建多个线程不就是多余的。
 
即然使用用步,是否意味着没必要创建多个线程,
只要有一个主线程是否就够了。
 
执行到VCL的时候必须使用同步,因为VCL不是线程安全的。
你说的“在同步中创建多个线程”是什么意思?
多个线程可以在某些方面提高工作效率,如果不访问VCL的时候可以并行处理,当然不会
是多余的。但是要注意的是线程并非是万能的,线程多了反而会导致效率的降低,据说
效率最高是5个线程。
 
在执行到vcl时,同时创建了许多个线程来执行相同的vcl操作,
而在线程中又要求使用同步执行,
且同步执行是在主线程中执行,而它创建的所有线程同样也需要同步执行,
不知这样是否有必要创建多个线程。
不知这种理解对吗?
 
这么说吧,vcl 的访问必须是串行化的,同一时刻 vcl 的操纵者只能有一个。
但是使用多线程的目的当然不是为了使用串行化的 vcl。多线程是为了更有效
地利用所有计算资源。如果你的程序有一部分执行时间很长,并且后面的代码
并不依赖这部分的执行结果,当然要考虑利用线程。
另外,线程的效率因素恐怕不能准确地用一个线程数目来确定。如果需要,一
个程序使用几十个甚至几百个线程也可以是高效的;如果盲目使用,有的时候
两个线程也是多余的,只会浪费资源。
 
我觉得
线程同步是指在多个线程的程序中,
一个线程由于程序逻辑的需要,要等待另一个线程执行完某项操作后
再执行下一步的操作。
而vcl中的线程安全是并行程序中的互斥问题,和线程同步还是有区别的。
请上面的老兄把问题说得再透彻一些!
 
to dana:“在执行到vcl时,同时创建了许多个线程来执行相同的vcl操作”,这个做法好象
挺怪异 :)
to mikedeakins:如果同时开几十个甚至几百个线程的话,效率无疑会很低,光是调度这些
线程就要光掉系统大量的资源,绝对是得不尝失的。当然,如果你用的是小型机或是大型机
的话,也许没有问题。
 
教父:你是否觉得我在使用同步操作时(vcl),是没必要同时创建多线程吗?
我自已弄不太明白,创建多个线程为了提高速度,可在vcl操作中又得使用同步,
所以想请教各位这样做是否有必要。
 
你的程序不可能是其它什么事都不做,就是一直不停地访问VCL吧?你只有在访问到VCL的
那一下子用Synchronize就行了,建议看一下DELPHI自带的那个线程例子,简洁明了,很
不错的。
 
多线程程序的优势不在VCL处理上,而是各种无界面处理(如数据库操作、文件读写等、其它费时计算)

例1:
你有一个包含即许多界面(菜单、窗体、按钮)又有许多费时操作的程序,当用户
点击某个按钮后,你需要把用户输入的数据保存到数据库或文件中,如果保存需要耗时
很长时间,则用户必须等待,用户会抱怨说你的程序太慢了。
这时,你可以创建一个线程做保存这件事,而主程序(即主线程)可以马上继续响应
用户的其它操许,这样用户的感觉是点击保存按钮后几乎没有等待感。
例2:
在例1中,假如你希望能在程序的状态条上显示保存进度,操纵状态条显然是VCL操作,所以
你需要在保存线程中使用同步。注意过MS Word中的后台保存吗?状态条上那个一闪一闪的
磁盘图标,就是保存线程的杰作。
综上所述,线程的主要功能不是VCL操作。假如你发现你的线程中需要进行大量VCL操作,那说明
程序的设计存在问题。
大家觉得如何?
 
飞龙在天:找你也找得很辛苦能留个mail,
能说明一下这句是为什么?
(假如你发现你的线程中需要进行大量VCL操作,那说明程序的设计存在问题。)
 
飞龙在天 讲得好,鼓掌!

 
to dana:
“假如你发现你的线程中需要进行大量VCL操作,那说明程序的设计存在问题”,
这时你可以把这些操作统统放到主程序中进行,运行速度并不会变慢,换句话说,
你不需要用线程。
所以,应该需要时再用线程,滥用反而效果不好。

我的email: 40960@sina.com
 
多人接受答案了。
 
后退
顶部