Terdapat tiga pilihan untuk memanggil fungsi C++ secara selari dalam sistem teragih: menggunakan benang, menggunakan kumpulan benang C++11 dan menggunakan perpustakaan pihak ketiga. Kumpulan benang menyediakan fungsi dan prestasi yang lebih maju, yang boleh digunakan untuk memproses imej, pengiraan saintifik dan kes praktikal lain, meningkatkan prestasi algoritma dengan ketara.
Dalam sistem teragih, selalunya perlu memanggil fungsi pada berbilang nod secara selari. Terdapat beberapa cara untuk melaksanakan fungsi ini dalam C++.
Cara paling mudah ialah menggunakan benang. Kod berikut mencipta empat utas, setiap satu memanggil fungsi selari:
#include <iostream> #include <thread> using namespace std; void function(int i) { cout << "Thread " << i << " is running." << endl; } int main() { thread thread1(function, 1); thread thread2(function, 2); thread thread3(function, 3); thread thread4(function, 4); thread1.join(); thread2.join(); thread3.join(); thread4.join(); return 0; }
Piawaian C++11 memperkenalkan perpustakaan std::thread
, yang menyediakan kumpulan benang yang lebih maju . Kolam benang ialah sekumpulan benang pra-dicipta yang boleh digunakan untuk melaksanakan tugas. Kod berikut menggunakan kumpulan benang untuk memanggil empat fungsi secara selari:
#include <iostream> #include <thread> using namespace std; void function(int i) { cout << "Thread " << i << " is running." << endl; } int main() { threadpool pool(4); for (int i = 1; i <= 4; i++) { pool.enqueue(function, i); } pool.join_all(); return 0; }
Terdapat juga beberapa perpustakaan pihak ketiga yang boleh digunakan untuk memanggil fungsi secara selari, seperti Intel TBB dan Boost. Asio. Perpustakaan ini biasanya menyediakan fungsi dan prestasi yang lebih maju daripada perpustakaan standard C++.
Berikut ialah kes praktikal menggunakan C++ untuk memanggil fungsi secara selari:
Pemprosesan imej
Pemprosesan imej selari boleh meningkatkan prestasi algoritma pemprosesan imej dengan ketara. Kod berikut menggunakan kumpulan benang untuk memproses empat kawasan berbeza pada imej secara selari:
#include <iostream> #include <thread> #include <vector> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; void process_region(Mat& image, int start_x, int start_y, int end_x, int end_y) { // 处理图像区域 } int main() { Mat image = imread("image.jpg"); threadpool pool(4); int width = image.cols; int height = image.rows; int region_width = width / 4; int region_height = height / 4; for (int i = 0; i < 4; i++) { int start_x = i * region_width; int start_y = 0; int end_x = (i + 1) * region_width; int end_y = height; pool.enqueue(process_region, image, start_x, start_y, end_x, end_y); } pool.join_all(); return 0; }
Atas ialah kandungan terperinci Skim panggilan selari bagi fungsi C++ dalam sistem teragih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!