是线程概念的新手。我对线程几乎没什么困惑。
通常调用方法和使用线程调用方法有什么区别。 thread.join有什么用?
实施例: 在代码隐藏文件中:通常调用方法
Getdata();
通过使用线程am调用这个方法:
Thread th=new Thread(new ThreadStart(Getdata));
th.Start();
哪一个产生高性能
答案 0 :(得分:0)
通过使用线程,你可以让慢速运行的进程“除了”代码的其余部分。
使用Join,您正在等待该代码完成。
例如,假设您从3个不同的慢速服务器通过网络获取数据。然后,在进行计算之前,启动树形线程获取此数据然后加入它们是个好主意。这样,当最慢的服务器响应而不是所有三台服务器的合并时间时,您就可以开始计算。
关于性能,您可以拥有一台多核机器。通过线程化,您可以使用更多内核,因此您也可以获得更好的性能。
答案 1 :(得分:0)
让我们把它简化为一个简单的案例。您的计算机中有双核处理器。让我们说每个核心一次只能处理一个线程(实际上,它们可以很快地在很多线程之间切换)。
为了一次运行两段代码,您需要2个线程。如果您只是将第二个线程的代码附加到第一个线程的末尾,则第二个线程必须等待第一个线程的代码完成。线程1被称为阻塞。据说线程2 等待。
线程有很好的应用。考虑游戏,其中场景的渲染是在循环中执行的。每帧之间的任何繁重处理都会导致帧速率变慢。你想避免这种情况。你是做什么?您在另一个线程上进行繁重的处理,并相信操作系统将充分利用可用的CPU核心。
答案 2 :(得分:0)
拥有多个线程的主要原因是加快计算速度。每个线程将在输入数据的一部分上执行复杂计算的一部分。如果您拥有与处理器核心一样多的线程,则每个线程将自由运行,并且每秒的计算次数将增加。增加高于此点的线程数(核心数)将不会带来太多好处。必须注意处理器体系结构的其他部分(内存,处理器缓存,其他一些共享资源),这样它就不会成为瓶颈,并迫使所有线程在大多数时间内等待它。
拥有线程的第二个原因是从主线程(通常是GUI线程)中删除所有冗长的操作。然后,应用程序更加用户友好,用户将不会遇到“冻结”窗口。
拥有线程的第三个原因是使代码同时更快更简单。假设您对数据和共享资源(Web服务,数据库,某些专用硬件,打印机)进行了复杂的操作,并且可以在几个更简单的操作中分离复杂的操作,并且根据数据省略部分操作。您可以拥有一个线程的“管道”,其中每个线程对数据执行一个简单的操作,对某些资源具有独占访问权限,并将结果发送到管道中的其他线程。整个过程的运行速度比从开始到结束只有一个运行每个位数据的线程运行得更快,但代码也不会太复杂。
答案 3 :(得分:0)
线程化的目的是满足在同一时间运行单独代码的需要。通常,如果您有源代码,源代码中的所有行都将按顺序执行。当您向20个收件人发送电子邮件时,我们考虑一下这种情况。如果您一个接一个地发送所有邮件,则总等待时间是您的电子邮件发送时的总时间。如果你创建20个线程,每个邮件发送一个,那么你的等待时间大致是你最慢的邮件的时间,大约是20倍的加速。另外,让我们考虑你正在玩一款针对电脑的国际象棋游戏。引擎必须不断考虑最佳可能的变化,但与此同时它的时间在减少,必须以图形方式显示,有时还应显示声音效果等等。