对于 linux 的并行执行和内存共享,是否有 pthreads 的替代方案?
Are there alternatives to pthreads for linux for parallel execution and memory sharing?
我编写了一个使用 pthread 库的 c++ linux 应用程序。但它对我不起作用,因为它没有启动 100 个线程,而是只启动了 98 个线程:
pthread_join Segmentation fault with 100 threads 除了 'fork' 之外,还有其他方法可以并行化我的代码吗?线程的一个优点是我共享了所有全局变量,并且我可以在必须编写共享变量的地方放置互斥量。
Is there an alternative other than 'fork' to parallelize my code?
有 std::thread
,这里的 C++ 人员无论如何都倾向于告诉人们使用它而不是 pthreads。但是,这很可能是在较低级别的线程库之上实现的,很可能是首先提供 pthreads 的系统上的 pthreads。
还有 OpenMP,但这又是低级线程机制的包装器。
通过多线程并行化唯一容易使用的替代方法是通过多进程并行化,这就是我对 fork
.
的理解。
An advantage of threads was in the fact that I had all the global variable shared and I could place mutex where I had to write a shared variable.
可以在多个进程之间共享内存并拥有在进程之间共享的互斥体。这比仅使用常规共享变量要棘手一些,但也没有那么复杂。这种机制称为 "shared memory",在 POSIX 世界中有两种类型:较旧的所谓 System V 共享内存段和较新的 POSIX 共享内存。
但是,我可以建议更好的解决方案可能只是减少线程数。 100 个线程对于大多数机器上的并行计算来说是非常过分的,因为你真正的并发性受到机器拥有的执行单元(核心)数量的限制。如果您希望它们在 I/O(不同文件)上定期阻塞很长一段时间,那么比这更多的线程可能有意义,但即便如此,100 可能也超出了合理的阈值。如果争用执行时间的线程多于调度它们的执行单元,那么与线程较少时相比,您获得的性能可能更差。
我编写了一个使用 pthread 库的 c++ linux 应用程序。但它对我不起作用,因为它没有启动 100 个线程,而是只启动了 98 个线程: pthread_join Segmentation fault with 100 threads 除了 'fork' 之外,还有其他方法可以并行化我的代码吗?线程的一个优点是我共享了所有全局变量,并且我可以在必须编写共享变量的地方放置互斥量。
Is there an alternative other than 'fork' to parallelize my code?
有 std::thread
,这里的 C++ 人员无论如何都倾向于告诉人们使用它而不是 pthreads。但是,这很可能是在较低级别的线程库之上实现的,很可能是首先提供 pthreads 的系统上的 pthreads。
还有 OpenMP,但这又是低级线程机制的包装器。
通过多线程并行化唯一容易使用的替代方法是通过多进程并行化,这就是我对 fork
.
An advantage of threads was in the fact that I had all the global variable shared and I could place mutex where I had to write a shared variable.
可以在多个进程之间共享内存并拥有在进程之间共享的互斥体。这比仅使用常规共享变量要棘手一些,但也没有那么复杂。这种机制称为 "shared memory",在 POSIX 世界中有两种类型:较旧的所谓 System V 共享内存段和较新的 POSIX 共享内存。
但是,我可以建议更好的解决方案可能只是减少线程数。 100 个线程对于大多数机器上的并行计算来说是非常过分的,因为你真正的并发性受到机器拥有的执行单元(核心)数量的限制。如果您希望它们在 I/O(不同文件)上定期阻塞很长一段时间,那么比这更多的线程可能有意义,但即便如此,100 可能也超出了合理的阈值。如果争用执行时间的线程多于调度它们的执行单元,那么与线程较少时相比,您获得的性能可能更差。