Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 单线程应用程序是一种死技术吗?_Multithreading_Concurrency - Fatal编程技术网

Multithreading 单线程应用程序是一种死技术吗?

Multithreading 单线程应用程序是一种死技术吗?,multithreading,concurrency,Multithreading,Concurrency,我刚买了一台新的,不到1000美元的笔记本电脑,一台直接面向消费者、非开发者市场的笔记本电脑,翻看说明书,惊讶地发现它是双核处理器的标准配置 这让我想到了一个问题:随着多核机器成为常态,编写单线程应用程序再正确不过了吗 除了一些琐碎的应用程序,可以合理地预期这些应用程序完全适合运行在最薄弱系统的单个处理器的单个核心中,如果一个应用程序在所有一个线程中运行,那么当应用程序没有提供关于如何优化这种拆分的指导时,现代操作系统将其执行分散到多个内核中的方式会严重降低应用程序的性能吗?除非应用程序需要多线

我刚买了一台新的,不到1000美元的笔记本电脑,一台直接面向消费者、非开发者市场的笔记本电脑,翻看说明书,惊讶地发现它是双核处理器的标准配置

这让我想到了一个问题:随着多核机器成为常态,编写单线程应用程序再正确不过了吗


除了一些琐碎的应用程序,可以合理地预期这些应用程序完全适合运行在最薄弱系统的单个处理器的单个核心中,如果一个应用程序在所有一个线程中运行,那么当应用程序没有提供关于如何优化这种拆分的指导时,现代操作系统将其执行分散到多个内核中的方式会严重降低应用程序的性能吗?

除非应用程序需要多线程,否则不应该使用多线程


仅仅因为你可以多线程并不意味着你应该。多核/处理器并不能真正改变这一事实。

因为线程总是给应用程序增加额外的复杂性,我相信单线程应用程序将永远占据一席之地。

即使单核处理器完全过时,单线程编程也不会消失

双核,尤其是在消费市场上,非常适合多任务处理。如果每个应用程序都有每个处理器核心,那么我们可能会遇到与单核处理器相同的问题


我说不要发疯,开始阅读所有的东西除非有充分的理由,否则请将其保存在一个线程中。

确切地说,并行编程在未来将有很大的发展,因为CPU不再会变得更快,我们将拥有大量的并行编程。拥有双核或四核只是一个开始,在不久的将来将会有更多处理器的系统(目前有256核的CPU,Windows 7将支持这种处理器)

然而,我认为并行性不适合解决任何问题,它需要不同的编程风格。使用当前技术,多线程为应用程序增加了相当高的复杂性。因此,函数式编程以及支持并行化的库/编译器等范例在未来将变得越来越重要


David Callahan在MSDN杂志上发表了一篇关于并行编程设计考虑因素转变的有趣文章:

与性能优化一样;您不能对任意应用程序的性能是否“足够”做出一般性声明。问题是,对于应用程序X来说,它是否“性能足够”

然而,也许更重要的是,你要继续看到摩尔定律的好处,即不再使处理器更快,而是使它们更小(因此在芯片上有更多的核)应用程序必须成为多线程的


但是,构建多线程应用程序(工程、测试、支持)的成本仍然很高,因此除非您需要性能,否则不应该这样做。我认为,随着我们继续向多核世界过渡,使用一些不同的库以及函数式编程和优化的编译器进行多线程编程的一些更简单的方法将变得更容易。

多线程应用程序的编写难度大大提高,维护。我认为,由于硬件和技术堆栈的进步,您将开始看到更多利用多线程的应用程序

微软有一套扩展,我相信它正在被添加到运行时中,名为“Parallels”??我知道他们称之为LINQ启用版本PLINQ。本质上,它试图从多线程算法中删除许多容易出错的管道

然而,只有时间告诉我们,我敢打赌,仍然有大量的单线程应用程序存在,因为它们的算法不能证明线程加速的性能成本是合理的

。。。当应用程序没有给出如何优化这种分割的指导时,在所有一个线程中运行的应用程序是否会因为现代操作系统在内核中分散执行而严重降级


不,它仍然可以像以前一样在单核CPU上运行。

多核的广告是为了用户的利益,而不是为了程序员。用户会被告知,拥有多个核心意味着他们可以同时运行多个复杂的应用程序,例如在Excel中更新大型电子表格和查看Powerpoint演示文稿等

显然,作为开发人员,您可以充分利用额外的内核;大多数视频编辑软件包在多核机器上运行得更快


如果您正在编写一个应用程序,它将从使用更多内核中获益匪浅,那么投资额外的开发时间可能是值得的,因为大多数新机器现在都有多个内核,但一如既往,请考虑投资回报率。

您的问题的答案很棘手,因为它要求我们对未来的开发进行推测。你的问题的简单答案是:

不,单线程是多线程的基础,一个线程不能没有另一个线程。因此,单线程应用程序的容量将始终存在,并且毫无疑问,它们将在未来几年中被编写

复杂的答案如下: 计算机之所以采用双核处理器标准,是因为它是处理器发展的下一步。虽然许多应用程序不会立即利用双核,但有些会。因此,像英特尔这样的公司必须适应,否则就会被竞争压垮

除此之外,还有直接的好处。更大的可寻址内存空间。操作系统本身已经被优化为双机系统
cat data.txt | sed 's/,/ /g' | awk '{print $4}' | gzip > foo.txt.gz