forked from premiere/premiere-libtorrent
improve parallelism of connection_tester gen-torrent (#1805)
improve parallelism of connection_tester gen-torrent
This commit is contained in:
parent
6ab18136f0
commit
94effa6ba7
|
@ -46,8 +46,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <atomic>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <boost/detail/atomic_count.hpp>
|
|
||||||
|
|
||||||
#if BOOST_ASIO_DYN_LINK
|
#if BOOST_ASIO_DYN_LINK
|
||||||
#if BOOST_VERSION >= 104500
|
#if BOOST_VERSION >= 104500
|
||||||
|
@ -89,7 +89,7 @@ bool test_corruption = false;
|
||||||
|
|
||||||
// number of seeds we've spawned. The test is terminated
|
// number of seeds we've spawned. The test is terminated
|
||||||
// when this reaches zero, for dual tests
|
// when this reaches zero, for dual tests
|
||||||
static boost::detail::atomic_count num_seeds(0);
|
std::atomic<int> num_seeds(0);
|
||||||
|
|
||||||
// the kind of test to run. Upload sends data to a
|
// the kind of test to run. Upload sends data to a
|
||||||
// bittorrent client, download requests data from
|
// bittorrent client, download requests data from
|
||||||
|
@ -100,10 +100,10 @@ enum test_mode_t{ none, upload_test, download_test, dual_test };
|
||||||
test_mode_t test_mode = none;
|
test_mode_t test_mode = none;
|
||||||
|
|
||||||
// the number of suggest messages received (total across all peers)
|
// the number of suggest messages received (total across all peers)
|
||||||
boost::detail::atomic_count num_suggest(0);
|
std::atomic<int> num_suggest(0);
|
||||||
|
|
||||||
// the number of requests made from suggested pieces
|
// the number of requests made from suggested pieces
|
||||||
boost::detail::atomic_count num_suggested_requests(0);
|
std::atomic<int> num_suggested_requests(0);
|
||||||
|
|
||||||
void sleep_ms(int milliseconds)
|
void sleep_ms(int milliseconds)
|
||||||
{
|
{
|
||||||
|
@ -816,22 +816,27 @@ void generate_torrent(std::vector<char>& buf, int size, int num_files
|
||||||
file_size += 200;
|
file_size += 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fs.add_file("stress_test_file", total_size);
|
|
||||||
libtorrent::create_torrent t(fs, piece_size);
|
libtorrent::create_torrent t(fs, piece_size);
|
||||||
|
|
||||||
// generate the hashes in 4 threads
|
int const num_threads = std::thread::hardware_concurrency()
|
||||||
std::thread t1(&hasher_thread, &t, piece_index_t(0), piece_index_t(1 * num_pieces / 4), piece_size, false);
|
? std::thread::hardware_concurrency() : 4;
|
||||||
std::thread t2(&hasher_thread, &t, piece_index_t(1 * num_pieces / 4), piece_index_t(2 * num_pieces / 4), piece_size, false);
|
std::printf("hashing in %d threads\n", num_threads);
|
||||||
std::thread t3(&hasher_thread, &t, piece_index_t(2 * num_pieces / 4), piece_index_t(3 * num_pieces / 4), piece_size, false);
|
|
||||||
std::thread t4(&hasher_thread, &t, piece_index_t(3 * num_pieces / 4), piece_index_t(4 * num_pieces / 4), piece_size, true);
|
|
||||||
|
|
||||||
t1.join();
|
std::vector<std::thread> threads;
|
||||||
t2.join();
|
threads.reserve(num_threads);
|
||||||
t3.join();
|
for (int i = 0; i < num_threads; ++i)
|
||||||
t4.join();
|
{
|
||||||
|
threads.emplace_back(&hasher_thread, &t
|
||||||
|
, piece_index_t(i * num_pieces / num_threads)
|
||||||
|
, piece_index_t((i + 1) * num_pieces / num_threads)
|
||||||
|
, piece_size
|
||||||
|
, i == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& i : threads)
|
||||||
|
i.join();
|
||||||
|
|
||||||
std::back_insert_iterator<std::vector<char>> out(buf);
|
std::back_insert_iterator<std::vector<char>> out(buf);
|
||||||
|
|
||||||
bencode(out, t.generate());
|
bencode(out, t.generate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue