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