我一直试图弄清楚如何解决我的要求,但对于我的生活,我无法想出一个解决方案.
我有一个项目数据库,它们存储了一种队列.(数据库已经实现,其他进程将向此队列添加项目.)
这些项目需要大量的工作/时间来"处理",所以我需要能够:不断地从数据库中排队项目.对于每个项目运行一个新线程并处理该项目,然后返回true/false它已成功处理.(这将用于将其重新添加到数据库队列中)
但是,仅在当前活动线程数(每个项目正在处理一个)小于最大线程数参数时执行此操作.
一旦达到最大线程数,我需要停止从数据库中对项目进行排队,直到当前线程数小于最大线程数.此时它需要继续对项目进行排队.
感觉这应该是我能想到的东西,但它不是来找我.
澄清一下:我只需要实现线程.数据库已经实施.
这是我关于这个问题的第二个问题,我对此有一些麻烦.<
好吧,我只想创建有限数量的线程(在这种情况下,我想要10个线程),然后每个线程将在我的列表中选取一个名称并在我的站点中获取一些数据.
我的系统工作得很好,但我的多线程系统仍然失败=(
-
我尝试了LU RD发布的代码,但主线程没有等待线程完成队列,只是停止=(
代码:
uses
Classes,SyncObjs,Generics.Collections;
Type
TMyConsumerItem = class(TThread)
private
FQueue : TThreadedQueue<TProc>;
FSignal : TCountDownEvent;
protected
procedure Execute; override;
public
constructor Create( aQueue : TThreadedQueue<TProc>; aSignal : TCountdownEvent);
end;
constructor TMyConsumerItem.Create(aQueue: TThreadedQueue<TProc>; aSignal : TCountDownEvent);
begin
Inherited Create(false);
Self.FreeOnTerminate := true;
FQueue := aQueue;
FSignal := aSignal;
end;
procedure TMyConsumerItem.Execute;
var
aProc : TProc;
begin
try
repeat
FQueue.PopItem(aProc);
if not Assigned(aProc) then
break; // Drop this thread
aProc();
until Terminated;
finally
FSignal.Signal;
end;
end;
procedure …Run Code Online (Sandbox Code Playgroud) 我需要一个队列结构,按插入值对元素(id,value)进行排序.此外,我需要能够删除具有最高值的元素.我不需要这种结构是线程安全的.在Java中,我想这与PriorirtyQueue相对应.
我应该在Python中使用什么结构?你能提供一个玩具的例子吗?
我正在练习Try-Catch,异常处理,堆栈和队列,所以尽管代码可能不切实际,但它对我的实践很有用.
public class Practice {
public static void main(String args[]){
Stack<String> sStack = new Stack<String>();
Queue<String> sQueue = new LinkedList<String>();
Scanner input = new Scanner(System.in);
String inString = " ";
boolean done = false;
do{
try{
while(!inString.equals("")){
System.out.println("Enter a string: ");
inString = input.nextLine().toString();
addS(sStack,inString);
}
done = true;
}catch(Exception e){}
sStack.pop();
for(int i = 0; i<sStack.size()+1;i++){
remS(sStack);
}
}while(done == false);
}
Run Code Online (Sandbox Code Playgroud)
代码旨在根据用户输入循环并填充空堆栈,然后循环遍历堆栈并在提示时删除每个元素.我输入的第一组是:
[艺术,蝙蝠,猫,码头,眼睛,父亲]
第二组是:
[艺术,蝙蝠,猫,码头,眼睛,父亲,孩子]
我注意到无论我输入多少元素,它最多只能删除4个元素.我想帮助你搞清楚原因.正如你所看到的,我试着玩循环的界限,但无济于事.无论我在哪里开始或绑定,它总是最终只会弹出4个元素.
我在下面提供的addS和remS函数
public static void addS(Stack t, String s){
t.push(s);
System.out.printf("%s was added …Run Code Online (Sandbox Code Playgroud) 使用" https://teamcity.com/app/rest/builds/ {buildLocator}?locator = running:any"API可以获取所有正在运行和已完成的构建,但无法获取队列中的构建.
如何在队列中获取构建?有谁知道吗?谢谢!
我将首先解释我的问题,然后提供很好的代码部分.我用一个名为process的自定义类填充队列.使用此行:
ProcessQueue.push(new Process(inputs[0], inputs[1], inputs[2], inputs[3], inputs[4]));
Run Code Online (Sandbox Code Playgroud)
这一切看起来都很好,当循环完成时,进程队列中充满了指针.但经过进一步检查,我发现他们都指向SAME对象?
发现这个好奇,我在循环的每次迭代中都进入了构造函数.
第一次迭代:当输入构造函数时,所有实例变量都为null(如预期的那样)
第二次迭代:在进入构造函数时,所有实例变量都包含在第一次迭代中赋予对象的值(即:相同的对象)
此后,当我使用队列时,我已经确认队列中的每个指针都指向同一个进程对象.(我可以告诉这个,因为进程包含一个状态,如果循环通过队列改变状态,我会发现状态已经改变为第二个指针)
我怀疑我一定是在创造课堂上做错了.所以这里完全是这样.
Process.h
#pragma once
class Process
{
public:
Process(int _processId, int _arrivalTime, int _CPUTime,
int _IOFrequency, int _IODuration);
~Process();
bool HasArrived(int time);
bool HasCompleted();
bool HasFinishedBurst();
bool HasFinishedIO();
int GetQueueNum();
int GetID();
void SetQueueNum(int i);
void SetToReady();
void Run();
void PerformIO();
};
Run Code Online (Sandbox Code Playgroud)
Process.cpp
#include "stdafx.h"
#include "Process.h"
#include <string>
using namespace std;
int processId;
int arrivalTime;
int CPUTime;
int IOFrequency;
int IODuration;
int Ticks;
int CPUConsumption;
int CPUBurstSize; …Run Code Online (Sandbox Code Playgroud) "当工作人员可用时,他们根据他们的优先主题列表从等待请求池中进行选择.所有在时间t到达的请求都可以在时间t分配.如果两名工作人员同时可用,则给予安排优先权最近的工作安排最早的工作.如果仍然存在平局,则在工作人员输入列表中,其编号出现的人员可以安排优先顺序."
我该如何实现呢?我在实现获得优先权的服务代理时遇到了麻烦.例如:我要定义两个代理人.代理1可以做数学,科学的主题.代理人2可以做科学,数学.
给定一个名为"科学"的主题如果这两个代理可用,我该如何选择代理2?因为他比代理人1更优先考虑科学话题....
如果两个代理商同时可用,我没有遇到任何问题,它将被提供给最近工作最早安排的代理商.我只是通过我给他们的属性对代理进行了排序.任何提示都会有所帮助.
我希望有一个环形缓冲区队列,它将接收对象并将它们从一个线程池中的多个线程分布到一个生产者中,然后分配给多个消费者时尚.如何使用disruptor模式实现这一目标?任何HelloDemux代码示例?谢谢!!!
我正在编写多线程应用程序。
我需要那种功能:method#1将数据放入Queue<>,然后method#2从Queue中获取数据并进行处理。
Method#2接受2个参数:XElement和FileInfo。如何存储这两个变量以Queue<>备将来使用?
我有几个工作需要完成X次,我有不同的工人有自己的信息.
除了工作有一个日期,我想在从最老的工作开始到下一个工作之前处理一个工作Y次.
工人只能处理一次工作.
目前我正在使用一个mysql数据库来实现这个以及作为工作者的PHP脚本,但似乎每秒约有50个作业存在瓶颈,我需要更快,所以我必须寻找替代方案.
我的设置有以下表格:
jobs
job_id | job_info | last_processed | times_executed | to_be_done
1 | 949461321 | 05-04-2014 00:14:56 | 192 | 1000
2 | 356454214 | 05-04-2014 00:14:57 | 8 | 200
3 | 321564642 | 05-04-2014 00:14:58 | 16 | 10000
4 | 546412131 | 05-04-2014 00:14:59 | 3 | 50
workers
worker_id | specific_information | status
1 | 4656439897543521456 | ok
2 | 6513165165465498498 | not_responsive
3 | 1046486479849870987 | not_responsive
4 | 6540498465494131131 | …Run Code Online (Sandbox Code Playgroud)