什么时候在应用程序中使用线程?例如,在简单的 CRUD 操作中,使用 smtp,如果服务器面临带宽问题,则调用可能需要一些时间的 Web 服务等。
老实说,我不知道如何确定是否需要使用线程(我知道一定是当我们期望某个操作需要一些时间才能完成时)。
这可能是一个“菜鸟”问题,但如果您与我分享您在线程方面的经验,那就太好了。
Thanks
我在您的问题中添加了 C# 和 .NET 标签,因为您在标题中提到了 C#。如果这不准确,请随意删除标签。
多线程有不同的风格。例如,有带有回调函数的异步操作。 .NET 4 引入了并行 Linq 库。您将使用的多线程风格,或者是否使用任何多线程风格,取决于您想要完成的任务。
并行执行(例如并行 Linq 通常尝试执行的操作)利用多个处理器核心来执行不需要等待彼此数据的指令。 Linq 之外的此类算法有很多来源,例如this http://www.cs.cmu.edu/~scandal/nesl/algorithms.html。但是,并行执行可能无法满足您的需要,或者它不适合您的应用程序。
更传统的多线程利用 .NET 库(在本例中)内的线程,如System.Thread
。请记住,在线程上启动进程会产生一些开销,因此仅当这样做的优点超过此开销时才使用线程。一般来说,只有当线程下运行的任务有很长的间隙(处理器可以在其中执行其他操作)时,您才需要使用这种类型的单处理器多线程。例如,来自硬盘(以及因此来自使用硬盘的数据库系统)的 I/O 比内存访问慢许多数量级。作为另一个例子,网络访问也可能很慢。多线程可以允许另一个进程在等待这些缓慢(与处理器相比)操作完成的同时运行。
我使用传统多线程的另一个例子是在会话中第一次访问特定 ASP.NET 页面时缓存一些值。我启动一个线程,以便用户在与页面交互之前不必等待缓存完成。我还规范了在用户请求另一个页面之前缓存未完成时的行为,这样,如果缓存未完成,也不是问题。它只是使一些以前太慢的进一步请求变得更快。
还要考虑多线程对应用程序的可维护性造成的成本。例如,线程应用程序可能更难调试。
我希望这至少能在一定程度上回答你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)