何时使用多线程?

Gui*_*Gui 17 .net c# multithreading

什么时候在应用程序中使用线程?例如,在简单的CRUD操作中,使用smtp,调用web服务,如果服务器面临带宽问题,可能需要一些时间,等等.

说实话,我不知道如何确定我是否需要使用一个线程(我知道它必须是在我们除了一个操作需要花费一些时间才能完成的时候).

这可能是一个"noob"问题但如果你与我分享你的线程经验会很棒.

谢谢

And*_*rew 8

我在你的问题中添加了C#和.NET标签,因为你在标题中提到了C#.如果不准确,请随意删除标签.

有多种不同的多线程风格.例如,存在具有回调函数的异步操作..NET 4引入了并行Linq库.您将使用的多线程样式,或者是否使用任何样式,取决于您要完成的任务.

并行执行(例如Linq通常会尝试执行的操作)利用多个处理器内核执行不需要等待彼此数据的指令.有对LINQ外这样的算法,如多源.但是,并行执行可能不适合您或者它不适合您的应用程序.

更传统的多线程利用了.NET库中的线程(在本例中)System.Thread.请记住,在线程上启动进程时会有一些开销,因此只有在这样做的优点超过此开销时才使用线程.一般来说,当线程下运行的任务有很长的间隙时,您只希望使用这种类型的单处理器多线程,处理器可以在其中执行其他操作.例如,来自硬盘的I/O(以及因此来自使用一个的数据库系统)比内存访问慢很多个数量级.作为另一个例子,网络访问也可能很慢.多线程可以允许另一个进程在等待这些缓慢(与处理器相比)操作完成时运行.

我使用传统多线程的另一个例子是在会话中第一次访问特定的ASP.NET页面时缓存一些值.我开始一个线程,以便用户在与页面交互之前不必等待缓存完成.我还规定了在用户请求另一个页面之前未完成缓存时的行为,这样,如果缓存没有完成,则不会出现问题.它只是使得一些进一步的请求更快,而以前太慢了.

还要考虑多线程对应用程序可维护性的成本.例如,线程应用程序可能更难调试.

我希望这至少在某种程度上回答了你的问题.