当前位置:  开发笔记 > 开发工具 > 正文

我为什么要使用线程而不是使用进程?

如何解决《我为什么要使用线程而不是使用进程?》经验,为你挑选了4个好方法。

将程序的不同部分分成不同的过程似乎(对我而言)制作一个更优雅的程序,而不仅仅是线程化所有东西.在什么情况下,让事情在线程上运行而不是将程序分成不同的进程是有意义的?我什么时候应该使用线程?


编辑

关于它们如何(或者如果)对单核和多核采取不同行为的任何事情也会有所帮助.



1> Frederick Th..:

您更喜欢多个进程的多个线程有两个原因:

    与进程间通信相比,线程间通信(共享数据等)的编程要简单得多.

    线程之间的上下文切换比进程之间的快.也就是说,操作系统停止一个线程并开始运行另一个线程比使用两个进程执行相同操作更快.

例:

使用GUI的应用程序通常使用一个线程用于GUI,其他用于后台计算.例如,MS Office中的拼写检查程序是一个与运行Office用户界面的线程不同的线程.在这样的应用程序中,使用多个进程会导致性能降低,代码难以编写和维护.


但是,数据共享是一个双面的硬币.您可以轻松搞乱其他线程的数据......
@Cannonade:“多线程对于*启动*可能是危险的”。您想要的更真实!我确定您的意思是“ * UN * -initiated”,但对于已启动的对象也很危险。

2> simplyharsh..:

除了使用线程过程的优点之外,例如:

好处:

创建线程比处理更快.

在线程之间切换比在进程之间切换要快得多.

线程轻松共享数据

考虑一些缺点:

线程之间没有安全性.

一个线程可以踩踏另一个线程的数据.

如果一个线程阻塞,则任务块中的所有线程.

关于你的问题的重要部分"我什么时候应该使用一个线程?"

那么你应该考虑一些线程不应该改变程序语义的事实.他们只是改变了操作的时间.因此,它们几乎总是被用作与性能相关的问题的优雅解决方案.以下是您可能使用线程的一些示例:

进行冗长的处理:当Windows应用程序正在计算时,它不能再处理任何消息.结果,无法更新显示.

进行后台处理:某些任务可能不是时间关键,但需要连续执行.

执行I/O工作:磁盘或网络的I/O可能会出现不可预测的延迟.线程允许您确保I/O延迟不会延迟应用程序的不相关部分.


你确定当1个线程阻塞时它们都会阻塞吗?你是什​​么意思?喜欢阻止等待I/O?你使用什么类型的线程?我知道PThreads不会阻止.
喜欢块等待资源.许多人讨厌它,但线程不是孤立的,因为它们没有自己的地址空间.线程导致的错误可能会终止整个进程或程序,因为该错误会影响该进程或程序中使用的所有线程的整个内存空间.块!!

3> BenB..:

我假设你已经知道你需要一个线程或一个进程,所以我认为选择一个而不是另一个的主要原因是数据共享.

使用流程意味着您还需要进程间通信(IPC)来获取进出流程的数据.如果要隔离这个过程,这是一件好事.



4> flodin..:

你肯定听起来不像新手.这是一个很好的观察,在许多方面,流程更优雅.线程基本上是一种优化,以避免过多的转换或内存空间之间的过多通信.

表面上使用线程似乎也可以使您的程序更容易读写,因为您可以自由地在线程之间共享变量和内存.在实践中,这样做需要非常小心,以避免竞争条件或死锁.

有一些操作系统内核(最着名的是L4)非常努力地提高进程间通信的效率.对于这样的系统,人们可能会提出一个令人信服的论点,即线程毫无意义.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有