Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Skim panggilan selari bagi fungsi C++ dalam sistem teragih?

Skim panggilan selari bagi fungsi C++ dalam sistem teragih?

WBOY
WBOYasal
2024-04-26 16:36:01522semak imbas

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.

C++ 函数在分布式系统中的并行调用方案?

Skim panggilan selari fungsi C++ dalam sistem teragih

Dalam sistem teragih, selalunya perlu memanggil fungsi pada berbilang nod secara selari. Terdapat beberapa cara untuk melaksanakan fungsi ini dalam C++.

Menggunakan Benang

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;
}

Menggunakan kumpulan benang dalam standard C++11

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;
}

Menggunakan perpustakaan pihak ketiga

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++.

Kes praktikal

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Penggunaan \t dalam c++Artikel seterusnya:Penggunaan \t dalam c++