gpt4 book ai didi

c++ - 单个程序中的 10 个线程或 1 个线程程序运行 10 次(C++)?

转载 作者:行者123 更新时间:2023-12-02 09:50:37 25 4
gpt4 key购买 nike

我想知道在运行具有 10 个不同线程的单个程序 (exe) 或使用单个线程并行运行程序 10 次(从 .bat 文件启动它)假设完成的工作是相同的情况下,性能是否有任何差异并且只有程序产生的线程数会发生变化?

我正在开发一个客户端/服务器通信程序,并想测试它的吞吐量。我目前正在学习并行编程和线程,因为不确定 Windows 将如何处理上述情况。调度程序在这两种情况下的工作方式是否相同?会有性能差异吗?

运行程序的机器有 4 个线程。

最佳答案

线程的重量比进程略轻,因为进程有很多东西可以得到它自己的拷贝。尤其是当您比较启动一个新线程和启动一个新进程所需的时间时(从头开始,fork 也可以避免大量成本)。尽管在任何一种情况下,您通常都可以在可能的情况下使用工作池获得更好的性能,而不是启动和停止新的进程/线程。

另一个主要区别是默认情况下线程都共享相同的内存,而进程拥有自己的内存并且需要通过更明确的方式进行通信(可能包括共享内存块)。这可能使线程解决方案更容易避免复制数据,但这也是多线程编程的危险之一,如果不注意它们如何使用共享内存/对象。

也可能有更多面向单个进程的 API。例如,在 Windows 上有 IO Completion Ports,它基本上适用于对不同的文件、套接字等进行许多正在进行的 IO 操作,并使用多个线程(但通常远少于文件/套接字的数量)来处理结果当它们通过 GetQueuedCompletionStatus 可用时环形。

关于c++ - 单个程序中的 10 个线程或 1 个线程程序运行 10 次(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59785443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com