在应用程序中什么时候使用线程?例如,在简单的CRUD操作中、使用SMTP、调用Web服务(如果服务器面临带宽问题可能需要一些时间等)。
说实话,我不知道如何确定是否需要使用线程(我知道必须在我们期望操作将需要一些时间完成时这样做)。
这可能是一个“初学者”问题,但如果您与我分享有关线程的经验,那将是太好了。
谢谢
在应用程序中什么时候使用线程?例如,在简单的CRUD操作中、使用SMTP、调用Web服务(如果服务器面临带宽问题可能需要一些时间等)。
说实话,我不知道如何确定是否需要使用线程(我知道必须在我们期望操作将需要一些时间完成时这样做)。
这可能是一个“初学者”问题,但如果您与我分享有关线程的经验,那将是太好了。
谢谢
System.Thread
提供。请记住,在启动线程上存在一些开销,因此只有当使用线程的优点超过此开销时才使用线程。一般来说,您只想在任务在线程下运行时具有长时间间隔的情况下使用这种类型的单处理器多线程。例如,硬盘I/O(因此,使用硬盘的数据库系统)比内存访问慢几个数量级。网络访问也可能很慢,例如。多线程可以在等待这些慢速(相对于处理器)操作完成时运行另一个进程。使用线程的一个原因是将大型CPU绑定任务分割到多个CPU/核心上,以更快地完成。另一个原因是让扩展任务异步执行,这样前台可以保持响应而不会被阻塞。
您的示例似乎集中在这两者中的第二个。虽然这可能是一个很好的理由,但如果您可以使用异步I/O,那通常更可取(例如,几乎所有使用套接字的东西都可以/将更适合使用异步套接字)。异步I/O更容易取消,并且通常也具有较低的CPU开销。
当你需要不同的执行路径时,可以使用线程。这会导致(如果正确执行)更具响应性和/或更快的应用程序,但也会导致更复杂的代码和调试。
在简单的CRUD场景中,可能没有那么有用,但是也许您的UI正在消耗缓慢的Web服务。如果您的代码绑定到UI线程,则在服务调用之间会出现无响应的UI。
在这种情况下,使用System.Threading.Threads可能过度,因为您不需要那么多控制。使用BackgrounWorker可能是更好的选择。
线程是一些难以掌握的东西,但是当正确使用时,其好处是巨大的,性能是最常见的。
你已经自己回答了你的问题。每当执行耗时操作时使用线程是正确的选择。同时在想要加快速度的情况下也应该使用线程。例如,你想处理一些文件-每个文件可以由不同的线程处理。
通过使用线程,你可以更好地利用多核/处理器机器的能力。
在应用程序的后台监视某些数据。
有数十种这样的情景。
意译:我意识到我的评论可能已经足够作为一个答案了...
我喜欢从资源的角度来看待多线程场景。换句话说,UI(图形)、网络、磁盘IO、CPU(核心)、RAM等等。至少在一般情况下,我发现这有助于决定何时使用多线程。
这背后的原因很简单,我可以利用一个特定线程上的一个资源(例如磁盘IO),同时使用另一个线程来完成使用不同资源的其他任务。