在循环中创建和使用线程的正确方法是什么?
如果我想处理一百万个项目,我会创建一个循环来完成。因此,为了提高效率,我将其设置为多线程,并将每个项目分配给一个线程。假设我创建了五个线程来处理这个问题。如何将工作分配给线程?
如果一个线程有一个较小的项目要处理,那么它可以自由地处理另一个线程--我如何将循环中的下一个项目分配给那个线程呢?
我是否要在循环外部创建线程,然后在内部使用它们?
下面是我正在处理的一个示例-它缺少创建对象的过程,并且只使用了两个线程,但我认为这里的人足够聪明,能够理解我的意思:)
public class App
{
public static void main
背景
我计划做一个调度程序,每分钟运行一次。无论何时运行,都会给出不同的目标数据,每次可能需要大约90秒。
我的计划
这一过程类似于:
multiple producers(threads) :
1. get data from some API
2. using data from 1. parse given data
3. put it into a common queue
↓
common queue
↓
multiple consumers(threads) :
1. get data from the queue
2. call some API
3. then insert
使用DRD (val差制)分析我的C++代码会发现一个“冲突的负载”,但我不明白为什么。守则如下:
int* x;
int Nt = 2;
x = new int[Nt];
omp_set_num_threads(Nt);
#pragma omp parallel for
for (int i = 0; i < Nt; i++)
{
x[i] = i;
}
for (int i = 0; i < Nt; i++)
{
printf("%d\n", x[i]);
}
程序运行良好,但是当主线程打印出x1的值时,DRD会看到一个问题。除了由于x数
我有一个C++程序,它尝试并行处理数组的每一行,在一行完成后,它继续处理下一行。我当前的程序为数组的每一行创建一个线程,并在使用后连接它们。但是看起来程序在创建/关闭线程上浪费了很多时间。
有没有办法只创建一次线程,并为每一行等待最慢的线程完成,然后执行下一行的函数?
下面是我的示例代码:
#include <iostream>
#include <thread>
using namespace std;
#define THREAD 5
int arr[2][10000];
void update_arr(int i, int j_s, int j_to){
我必须创建一个简单的客户机<->服务器通信来使用C语言(Linux)传输文件。
服务器接受10000端口上的连接,我不知道是否最好在每个请求中创建一个新线程,或者创建一个固定数量的线程,并使用异步技术。
CASE A:
client --> server --> (new thread) --> process the request
CASE B:
SERVER --> create thread 1 - thread 2 - thread 3
then
client1 --> server --> thread 1
client2