concurrency - 哪些挑战促进了并行/并发架构的使用?

标签 concurrency erlang parallel-processing python-stackless stackless

我对使用内置并行性/并发性的语言的可能性感到非常兴奋,例如 stackless pythonerlang ,并且坚信我们都必须在不久的将来朝着这个方向前进 - 或者会想要,因为这将是获得可扩展性和性能的好/简单方法。

然而,我太习惯于以线性/串行/OOP/函数方式思考解决方案,以至于我正在努力以一种值得使用并发的方式来解决我的任何领域问题。我怀疑我只需要忘记很多东西,但我想我会问以下问题:

  • 您是否在 stackless 或 erlang 或其他中实现了相当大的东西?
  • 为什么这是一个不错的选择?这是一个不错的选择吗?你还会做吗?
  • 您的问题的哪些特征意味着并发/并行是正确的?
  • 您是否重新解决了现有问题以利用并发/并行?和
  • 如果是这样,如何?

  • 有没有人愿意分享的经验?

    最佳答案

    过去,当台式机只有一个 CPU 时,并行化仅适用于“特殊”并行硬件。但是现在台式机通常有 2 到 8 个内核,所以现在并行硬件是标准。这是一个很大的区别,因此它不仅是关于哪些问题表明并行性,而且是如何将并行性应用于比以前更广泛的问题集。

    为了利用并行性,您通常需要以某种方式重铸您的问题。并行性在许多方面改变了游乐场:

  • 您会遇到数据一致性和锁定问题。因此,您需要尝试组织您的问题,以便您拥有可以由不同线程、进程和计算节点处理的半独立数据结构。
  • 如果并行组件执行工作的相对顺序会影响结果,则并行性还可以将不确定性引入您的计算中。您可能需要防止这种情况发生,并定义一个并行版本的算法,该版本对不同的调度顺序具有鲁棒性。
  • 当您超越主板内的并行性并进入网络/集群/网格计算时,您还会遇到网络带宽、网络中断以及故障计算节点的正确管理等问题。您可能需要修改您的问题,以便在网络节点出现故障时更容易处理部分计算丢失的情况。
  • 关于concurrency - 哪些挑战促进了并行/并发架构的使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/541344/

    相关文章:

    erlang - 如何使用 PEM key 文件在 Erlang 中通过 SSH 连接

    r - parLapply 超时选项

    c++ - MPI_Bcast c++ STL vector

    java - 当其中一个找到素数时如何停止线程

    c++ - 图像处理中的并发设计

    c++ - 将 std::thread 与 std::mutex 一起使用

    java - 为什么增加 newFixedThreadPool 会导致性能不佳?

    java - Java 多久同步一次内存?

    erlang - cometd 的最佳方法? (非阻塞 IO 与 Erlang)

    erlang - 使用 erlang.mk 指定应用程序启动顺序