【问题标题】:Can I take advntage of multi core in a multi-threaded application that I develop我可以在我开发的多线程应用程序中利用多核吗
【发布时间】:2015-04-01 17:39:27
【问题描述】:

如果我在 linux 上编写多线程 C 应用程序(使用 pthreads),我可以利用多核处理器吗?

我的意思是应用程序员应该如何利用多核处理器。或者是操作系统单独使用它的各种调度算法来做到这一点

【问题讨论】:

  • 如果我在 Linux 上编写多线程 C 应用程序(使用 pthreads),我可以利用多核处理器吗? - 是的。
  • 您能否就如何实现这一目标提供一些提示或指针@ComicSansMS
  • 如果您使用现有的多核操作系统(如 Linux),这尤其容易。
  • 听起来像XY problem

标签: c multithreading multicore


【解决方案1】:

你不需要做任何事情。创建任意数量的线程,操作系统会将它们与来自所有其他进程的线程一起调度到每个可用内核上。

【讨论】:

  • 关于“最好每个核心有一个线程”:仅当您正在执行仅执行非阻塞 IO 或严格受 CPU 限制的事情时。如果您的线程在阻塞 I/O 和计算之间交替,您可以通过超出内核数量来获得性能提升。我认为将这样的概括扔给那些显然是线程新手而没有提供解释或引用的人是不好的。
  • Linux 是否有相当于 Windows SetThreadAffinityMask 的功能?
【解决方案2】:

“利用多核”可以理解为“利用多核”。

或者它可能意味着“从利用多核中获得质的优势。”

任何人都可以做到前者。他们最终得到的软件运行速度通常比单线程慢。

后者是一个完全不同的命题。它需要编写软件,以便节省所有内核(总线锁定、RAM 和 L3 缓存)共享的计算资源的使用和访问,并专注于主要在单个内核及其 L1 缓存中进行尽可能多的计算。 L2 缓存通常由两个内核共享,因此它介于这两个类别之间,是的,它是一个共享资源,但它仅由两个内核共享,并且比所有内核共享的资源快得多。

这是在实现级别,编写和测试代码。

在早期阶段做出的决定——特别是系统的软件架构阶段——通常对系统的长期质量和性能更为重要。

一些帖子:123。还有很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多