Boost Thread库与java.util.concurrent库相比如何?
性能是至关重要的,所以我更喜欢使用C++ (尽管现在的速度要快得多)。考虑到我必须用C++编写代码,那么有哪些库可以使线程化变得容易并且不容易出错。
我最近听说,从JDK1.5开始,Java内存模型发生了变化,修复了一些并发问题。那C++呢?我上一次使用C++进行多线程编程是在3-4年前,当时我使用了pthread。不过,我不希望再在大型项目中使用它了。据我所知,唯一的另一个替代方案是Boost Thread。然而,我不确定它是不是很好。我听说过关于java.util.concurrent的好消息,但是还没有关于Boost线程的消息。
发布于 2009-11-19 05:05:35
Boost线程比pthread更容易使用,在我看来,也比Java线程更容易使用。当一个boost线程对象被实例化时,它会启动一个新线程。用户提供将在该新线程中运行的函数或函数对象。
它真的很简单:
boost::thread* thr = new boost::thread(MyFunc());
thr->join();通过将值存储在function对象中,可以轻松地将数据传递给线程。在最新版本的boost中,您可以向线程构造函数本身传递可变数量的参数,然后这些参数将被传递给您的函数对象的()操作符。
您还可以将RAII样式的锁与boost::mutex一起使用以进行同步。
请注意,对于std::thread,C++0x将使用相同的语法。
发布于 2009-12-26 21:18:54
java.util.concurrent和boost threads library具有重叠的功能,但java.util.concurrent还提供a)较高级别的抽象和b)较低级别的功能。
Boost线程提供:
和线程(Java: java.util.Thread)
java.util.concurrent还具有:
附注: C++目前没有内存模型。在不同的机器上,相同的C++应用程序可能必须处理不同的内存模型。这使得用C++进行可移植的并发编程变得更加棘手。
发布于 2009-11-19 06:06:52
在性能方面,我并不真正担心。我的直觉是,boost/c++专家可以写出比java专家更快的代码。但任何优势都必须争取。
与Java相比,我更喜欢Boost的设计范式。Java完全是面向对象的,如果你喜欢Boost/C++,它允许面向对象,但对手头的问题使用最有用的范式。尤其是在处理锁的时候,我喜欢RAII。Java很好地处理了内存管理,但有时它感觉程序员的其他资源被篡改了:文件句柄、互斥、数据库、套接字等。
Java的并行库比Boost的更广泛,线程池,并发容器,原子等等。但是核心原语,线程,互斥锁,条件变量都是一样的。
因此,对于性能,我会说这是一次洗牌。如果你需要大量的高级并发库支持,Java就是最好的选择。如果你更喜欢范式自由,C++。
https://stackoverflow.com/questions/1758664
复制相似问题