我正在编写一个多线程代码,其中一堆std::async
调用在整个程序期间产生固定数量的线程。每个线程都const BigData
以只读方式处理相同的结构。有频繁的随机读取,const BigData
但线程是完全独立的。是否可以合理地期望获得完美的扩展,或者是否可以预期更多的内存访问会减慢?
编辑:经过一些分析,这似乎是罪魁祸首:
class Point {
friend Point operator+(const Point& lhs, const Point& rhs) noexcept {
return Point{lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z};
};
friend Point operator-(const Point& lhs, const Point& rhs) noexcept {
return Point{lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z};
};
public:
Point() noexcept;
Point(const Real& x, const Real& y, const Real& z) noexcept
: x{x}, y{y}, z{z} {};
private:
Real x{0};
Real y{0};
Real z{0};
};
operator+
在重构我的代码以避免对and的不必要调用之后operator-
,我似乎获得了更好的扩展性。