kimse yerine yeni std::async
ile deneyime sahip mi? Şu anda bir dosya yığınını okuyan ve bu parçayı bir async işlevine geçiren bir paralel dosya ayrıştırıcısını uyguluyoruz. Clang (v3.0) bu şekilde kullanılmasıGCC en std ile davranış :: zaman uyumsuz (std :: fırlatma :: zaman uyumsuz)
varsayılan std::async
politikaları (uygulanmasına bağlı) ile gerçekten iyi çalışıyor. İki çekirdekli bir makinede, gerçekten iyi çalışan 4 parçayı ateşler.
Ama GCC (v4.7) ile
, dosya okuma ipliği tamamen sıralı sonunda programı yapma, herhangi bir yeni konuları yumurtlamaya etmez.std::launch::async
kullanma
, her iki sürüm hemen hemen aynı (ne olması gerektiği durumda) yapıyoruz.
GCC'nin C++ 11 iş parçacığı yeteneklerinin akımının durumunu bilen var mı? Ya da bu bizim uygulamalarımızda bir hata olabilir mi?
Kısa kod:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
Gerçekten Boost'u kullanmanızı tavsiye ederim. Uygun C++ 11 desteğine büyük bir sıçrama olmayacaktır. C++ 11'deki yeni iş parçacığı modelleri, GCC veya MSVC'nin kullandığıdan farklı bir bellek düzeni gerektirir ve çok fazla uygulanmazlar. –