Priority Queue Ordering
In the process of using a Priority Queue the question came up about what order elements with equal priority are removed. The two logical orders would be first in, first out, like the standard queue, or first in, last out, like a stack. However, testing the Priority Queue showed that the elements of equal priority were removed in neither order, and moreover, the elements were stored in a neither consistent nor prioritized order. My question is, what causes this situation, is there any way to predict the order in which equally prioritized elements will be removed, and is there any way to force the Priority Queue into removing elements in a first in, first out order without writing my own?
In the process of using a Priority Queue the question came up ...I don' t know why.The Javadoc clearly specifies that 'ties are broken arbitrarily'.
My question is, what causes this situationThe fact that it uses a priority heap algorithm, which is where its O(log(n)) performance comes from.
is there any way to predict the order in which equally prioritized elements will be removedNo.
and is there any way to force the Priority Queue into removing elements in a first in, first out order without writing my own?Encode insertion time as a minor key of the priority.
Similar Messages
-
Custom order of priority queue
I am a novice in Java. I intend to use a priority queue which holds objects. The objects have a string and two integers. I have to order the priority queue based on one of the integer.
I write syntax according to my understanding please correct me.
PriorityQueue<Object> pr = new PriorityQueue<Object>();
comparable(){
sort(Object.int2)// this is the place where I am confused
}Here's an example:
public class Caller
public static void main(String[] args)
Flight f1 = new Flight( "java", 2, 34 );
Flight f2 = new Flight( "java", 2, 3 );
Flight f3 = new Flight( "java", 2, 4 );
Flight f4 = new Flight( "java", 2, 64 );
Flight f5 = new Flight( "java", 2, 22 );
Flight f6 = new Flight( "java", 2, 12 );
PriorityQueue pq = new PriorityQueue();
pq.add(f1);
pq.add(f2);
pq.add(f3);
pq.add(f4);
pq.add(f5);
pq.add(f6);
System.out.println(pq.poll());
System.out.println(pq.poll());
System.out.println(pq.poll());
System.out.println(pq.poll());
System.out.println(pq.poll());
System.out.println(pq.poll());
public class Flight implements Comparable
private String airlinename;
private int flightnumber;
private int number;
public int compareTo(Object o)
Flight f = (Flight) o;
return number - f.getNumber();
public String toString()
return airlinename + " - " + number;
public Flight(String airname, int num1, int num2)
airlinename = airname;
flightnumber = num1;
number = num2;
public String getAirlinename()
return airlinename;
public void setAirlinename(String airlinename)
this.airlinename = airlinename;
public int getFlightnumber()
return flightnumber;
public void setFlightnumber(int flightnumber)
this.flightnumber = flightnumber;
public int getNumber()
return number;
public void setNumber(int number)
this.number = number;
}Got it? -
Revision: 3497
Author: [email protected]
Date: 2008-10-06 14:48:38 -0700 (Mon, 06 Oct 2008)
Log Message:
Changing internal datastructure utilized by the LayoutManager's priority queue, in order to provide a mechanism for quicker lookup of items being validated with 'ValidateNow/ValidateClient'. Will be keeping a close watch on perf suite results after this change, to ensure we did not inject memory issues.
Reviewer: Glenn
QA: No (Keeping watch on Mustella, but cyclone looked good).
Modified Paths:
flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/layoutClasses/PriorityQueue. as -
Hi Everybody.
Can anyone tell me in which order elements of priority queue are sorted.
I have used following code
class Test{
PriorityQueue <strings> pq=new PriorityQueue <Strings>();
pq.add("silpa");
pq.add("swati");
pq.add("roopa");
pq.add("abc");
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq.peak());
The output I got is
[abc silpa swathi roopa]
abc
roopa.
Can anybody explain why the collection elements are not sorted ?
I am getting correct output with peek() n poll().According that methods i should get
[abc roopa silpa swathi ]
Explain the reason?System.out.println(pq);This line prints out the contents of the queue, by implicitly calling pq.toString(), whose behaviour is inherited from AbstractCollection, which therefore has nothing to do with sorting. So you have no valid reason for expecting any particular ordering.
-
Revision: 3539
Author: [email protected]
Date: 2008-10-09 10:58:31 -0700 (Thu, 09 Oct 2008)
Log Message:
Updated RadioButtonGroup to account for recent changes to LayoutManager priority queue. The order that a RadioButtonGroup was traversed was always dependent on what order that the radio buttons properties were validated. Since this assumption no longer holds true, we are now very specific about how the group orders the RadioButtons (breadth-first for consistency with Flex 2 and Flex 3).
Check-in Tests: Pass
Mustella Tests: (RadioButton, RadioButtonGroup) Pass
Reviewer: Glenn
QA: Yes
Bugs: SDK-17248
Ticket Links:
http://bugs.adobe.com/jira/browse/SDK-17248
Modified Paths:
flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButtonGroup.asRevision: 3539
Author: [email protected]
Date: 2008-10-09 10:58:31 -0700 (Thu, 09 Oct 2008)
Log Message:
Updated RadioButtonGroup to account for recent changes to LayoutManager priority queue. The order that a RadioButtonGroup was traversed was always dependent on what order that the radio buttons properties were validated. Since this assumption no longer holds true, we are now very specific about how the group orders the RadioButtons (breadth-first for consistency with Flex 2 and Flex 3).
Check-in Tests: Pass
Mustella Tests: (RadioButton, RadioButtonGroup) Pass
Reviewer: Glenn
QA: Yes
Bugs: SDK-17248
Ticket Links:
http://bugs.adobe.com/jira/browse/SDK-17248
Modified Paths:
flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButtonGroup.as -
Multiple Priority Queues?
All,
I have read that one may configure up to 4 priority queues, not using the Modular QOS CLI (e.g. "priority-list" command, etc).
For the Modular QOS CLI, PQs are implemented using LLQ ("priority" command), and for this one can only specify a single PQ (though multiple classes may be mapped to this single PQ).
What I would like to do is to have 2 distinct PQs (as should be possible in the non modular cli case) and also use CBWFQ (e.g. "bandwidth" command) for the rest of the clases. Basically I want to have EF in one PQ, another "special" class in the other PQ (lower priority than EF), and AF classes using CBWFQ.
Does anyone know of a way to combine the 2 methods (modular and non modular CLI) of configuring LLQ in order to implement such a configuration? I was encouraged to see that heirarchical policies are supported but so far I have not found a way to specify multiple PQs as well as CBWFQ.
Thanks much!There has been alot of discussion on this subject. But it seems that while IOS will allow you to configure multiple priority queues, its not really possible for it to deliver multiple priority queues.
Which, if you think about it makes sense. A priority queue is just that, it takes priority over all other queues. If you configue 2 priority queues, how would you then then tell the scheduler that these are both priority, but the 2nd is less of a priority?
One way you can accomplish what you're trying to do:
1. Create a single "priority" queue for your EF traffic
2. Use "bandwidth" to guarantee bandwidth to your special class.
3. Put your AF traffic in class-default and let it "fair-queue".
Something like this:
policy-map foo
class EF
priority 100
class Special
bandwith 50
class class-default
fair-queue
-Geoff -
Priority queue out handling.
We're testing the reference system shown in the figure below.
System Description
Four 2960 switches are used for transport;
Equipment 1 and Equipment 2 exchange packets for synchronization;
To reach synchronization Equipment 1 and 2 must exchange data with a very low jitter.
2960 Configuration details
Four our test puprose, we're using 100Mbit/s ports (22 and 23) as trunk.
In order to obtain minimum jitter We performed these configurations:
We Enabled QoS;
We Marked Synchronization packets with CoS 7 and DSCP 63;
We marked other kind of traffic inserted in different ports) with CoS 0;
We set "trust DSCP" on trunk ports;
On the trunk ports we mapped traffic with CoS 7/DSCP 63 (and only this) on output queue 1;
We enabled the expedite queue (priority-queue out).
Question
With these settings we aim at forcing our synchronization packtes to precede other kind of traffic and go from Equipment 1 to Equipment 2 with minimum jitter.
Unfortunately we experienced high jitter when both synchronization packets and other traffic are sent through the systems.
What is wrong in our assumptions or configurations?
What is the real behaviour of the expedit queue?Seems the right config.
This is the my configuration and it works well:
#global level
mls qos srr-queue input priority-queue 2 bandwidth 20
mls qos srr-queue input cos-map queue 1 threshold 3 0 1 2 3 4
mls qos srr-queue input cos-map queue 2 threshold 3 5 6 7
mls qos srr-queue output cos-map queue 1 threshold 3 5 6 7
mls qos srr-queue output cos-map queue 2 threshold 3 4
mls qos srr-queue output cos-map queue 3 threshold 3 2 3
mls qos srr-queue output cos-map queue 4 threshold 3 0 1
mls qos
#port level
mls qos trust dscp
priority-queue out
What is your IOS version?
Can you use the 2960 Gigabit port?
Regards. -
Wanted: Flexible Priority Queue
Given this class
class Foo {
private int STATE, VAL;
// STATEs are unique, VALs are not
I want a collection C of Foo objects that supports these operations
in at most O(log n) time.
(1) boolean C.contains(Object o);
--> Using STATE as the comparator
(2) Object C.get(Object o);
--> Return a reference to the collection object that equals o,
again, using STATE as the comparator
(3) Object C.minExtract();
--> Remove and return the object with the minimum VAL.
If there is a tie, choose arbitrarily.
Operations (1) and (2) call for something like a TreeMap.
But operation (3) wants to treat the collection as a priority queue,
which is often implemented as a heap data structure -- which I don't
see in the classes that come with java.
In fact all the SortedSet and SortedMap collections seem to require
unique keys, whereas operation (3) wants to keep the collection sorted
by non-unique VALs.
Question: are there off-the-shelf classes I can use to efficiently do what
I want, or do I need to design it from scratch?
thanks,
royDragonMan,
I agree I may have to create a class which manages two data structures. The first, perhaps, a HashSet. but:
The other a sorted List of some kind, ordered by VAL.The problem here is "what kind"? As I noted, all of java's sorted collections seem to require unique keys, but VAL is not unique. I suppose I could create my own red-balck tree or heap or whatever, but I'd like to see how much mileage I can get out of java first.
Currently, I'm considering combining STATE and VAL to make a unique key (since STATE already is unique) whose order however, is dominated by the VAL component.
roy -
Priority Queue add help?
ok, I'm making a priority queue from a List and I'm trying to figure out how to add to the queue so that the items are stored in the queue in order and this is what I have.
On the line that starts if(newItem.compareTo... eclipse is giving me a warning:
Type safety: The method compareTo(Object) belongs to the raw type Comparable. References to generic type Comparable<T> should be parameterized
And I dont know what that means? will my add method work as planned?
Also, my List class has a max size (that is private) and I want it so that if the priority queue tries to add over the max size it will throw an exception but the commented out line just causes an error...any ideas?
Thanks
public void enqueue(Comparable newItem) throws QueueException
//if(aList.size() == MAXLIST) throws Exception
if(aList.size() == 0) aList.add(1, newItem);
else
for(int i = 1; i <= aList.size(); i++)
if(newItem.compareTo(aList.get(i)) == -1) aList.add(i, newItem);
}And I dont know what that means? The warning is referring to generics: http://java.sun.com/docs/books/tutorial/extra/generics/index.html
-
Java provides PriorityQueue, and I have gone through its API.
The implementation of PriorityQueue in Java does not provide method for increase or decrease key,
and there must be a reason for it.
But, when i go through books on data strucutre, a lot of them talk about the increase/decrease key function
of the PriorityQueue.
So I am just wondering, why is it that increase/decrease function not provided in PriorityQueue. I cannot come up with a reason for it, but i think there must be. Does anybody have any thought on this. Or is it just
because the designers thought its not needed?
I checked the source for the Priority Queue and the heapify() method was declared private.lupansansei wrote:
I have used Java's priority queue an I have written my own but I have never come accros the terms "increase or decrease key". Do you mean something like 'upheap' or 'downheap' in relation to a 'heap' implementation meaning move an entry to it correct position if the key changes? If so then one should make the 'key' immutable so that the functions are not needed.
Yes, i mean 'upheap' or 'downheap' by increase or decrease key. Sorry
maybe my choice of words was not correct.
I couldn't get what you mean by 'key' immutable. Can you please explain it. If the key cannot change (i.e. it is immutable) then there is no need to ever change the position of an element.
>
Correct. Since the PriorityQueue does not need to implemented using a 'heap' there is no need for the heapify() method to be exposed. If one implemented using a balanced tree or a skip list the heapify() method would not be applicable.I am using PriorityQueue and i need to update the priority of the elements and i was wondering whether to implement the whole queue
myself or look for a better way of using the PriorityQueue class.
Do you have any suggestions for efficiently updating the priority of element?I have a priority queue implementation where elements know they are in a heap and know where they are in the heap. By doing this I can modify 'keys' and then move a value to it's correct place in the queue in a very short time. The limitations this feature imposes on the elements and the possibility of corrupting the heap means I don't often use this these days. It is far too error prone.
These days in my simulations I normally remove an element from the queue, process the element and then create new elements and insert them back in the queue. This sometimes takes 2 lots of Log(n) operations where my specialized priority queue just takes Log(n) operations. The code is just so much more maintainable and I accept the hit. -
Does the priority queue always work?
Hi
I have a 8Mbp of wan link which sometime gets saturated and I have shaped average this to 8Mbps but i am running vocie on this WAN link and have defined priority for voice with 850kbps under voice class. My question is when the link is not fully utilized, Will the packets from priority queue are always dequeued first as compared to packets sent from from other queus or will the QoS will not do anything here since the link utilization is lot less than what is sepecified in shape average. I am asking this to confirm if the priority queue always help to overcome the issue of jitter if either the link is saturated or not?
ThanksDisclaimer
The Author of this posting offers the information contained within this posting without consideration and with the reader's understanding that there's no implied or expressed suitability or fitness for any purpose. Information provided is for informational purposes only and should not be construed as rendering professional advice of any kind. Usage of this posting's information is solely at reader's own risk.
Liability Disclaimer
In no event shall Author be liable for any damages whatsoever (including, without limitation, damages for loss of use, data or profit) arising out of the use or inability to use the posting's information even if Author has been advised of the possibility of such damage.
Posting
You describe PQ and shaping, but the former is usually a part of doing QoS on L2/L3 switches, and the latter on routers. What device(s) and their IOS versions and the WAN media are you working with?
On "routers", interfaces generally have FIFO tx-rings, only when they overflow, are packets placed in CBWFQ queues. Within CBWFQ, LLQ will be dequeued first, but such packets might have already been queued behind other non-LLQ traffic within the interface tx-ring. (NB: for routers, with tx-rings, when supporting VoIP, you may want to minimize the size of the tx-ring.)
Shapers, in my experience, are "interesting". First, I believe many shapers don't account for L2 overhead, but provider CIRs often do. So unless you shape slower than the nomimal CIR rate, you can send faster than the available bandwidth. (Often I've found shaping 10 to 15% slower allows for average L2 overhead.)
Second, shapers work on averages over time intervals. For VoIP, you'll often want to insure the shaper is using a small Tc, otherwise it will allow FIFO bursts. (I've found a Tc of 10ms seems to support VoIP fairly well.)
Third, I suspect some shapers might have their own queues between the interface and the defined policy queues. If they do, unknown what their queuing organization is or their supported queuing depths. If this is the case, makes it difficult to engineer QoS.
Whenever possible, I've found it beneficial to work to avoid using shapers especially for timing sensitive traffic, like VoIP. In your case, I would suggest, if possible, obtaining 10 Mbps of WAN bandwidth and somewhere passing the traffic through a physical 10 Mbps interface, with a QoS policy.
But to more directly answer your question, PQ (or LQ) will dequeue its packets next compared to other "peer" queues. This should always help VoIP for delay and jitter, but there's more involved whether this is necessary and/or whether it's helpful enough when necessary.
You ask about when a link is saturated, but a link is 100% saturated everytime a packet is being transmitted. Often link usage is represented in percentages of usage of possible maximum transmission rate over some time period, but when it comes to QoS, 100% utilization might be just fine while 1% utilization is not. Much, much more information, about your situation, might be needed to offer truly constructive recommendations. -
hi iam a beginner in java, could you please help me with this code. thanks
Implement (provide complete Java code) a priority queue using a singly linked list. You may call this class LinkedPriorityQueue. The use of classes contained in the Java Collections framework in the above implementing is strictly forbidden.
You may need to write a second class, PQNode, which defines the nodes in your linked list. Feel free to implement the PQNode class in anyway that you see fit. However, the LinkedPriorityQueue class should implement all methods and constructorsHere is the search of the forums
http://search.java.sun.com/search/java/index.jsp?qp=&nh=10&qt=%22singly+linked+list%22&col=javaforums&x=23&y=16
Here is a google search
http://www.google.com/search?hl=en&lr=&ie=ISO-8859-1&q=%22singly+linked+list%22+java
Due tomorrow??? -
Priority in order when doing release
Hi Experts,
Let's say that i have a priority for order set as :
-relative start date : 1 day
-relative end date : 2 days
When creating the order with priority filled in the initial screen , the system does calculate the right dates for the basic start and finish dates (work duration field is not filled)
However, when i click on the release button, those basic start date and basic finish date are changed and are replaced by today's date !
Is it the normal behavior?
am i missing a configuration point?
thanks
P.Pete,
Check transaction OPU7.It looks like you are adjusting basic dates and requirements dates to Operation dates.This would keep the Basic dates equal to Scheduled dates. Change this to "Do not basic adjust dates" , This would keep the basic dates calculated initially through priority as such.
Regards
Narasimhan -
Low priority and high priority queue
Hi
we have high priority and low priority queue's. Functionality wise i know that time critical messages will be sent through high priority queue's and low priority messages will be sent
through low priority queues. But like to know what technicality makes this separation of
low priority and high priority queue's ? The crus of the question is what technical setting(s)
makes the queue as high priority and what technical setting(s) makes the queue as low priority
queue.
Thanks
kumari Michal
I am talking abt queue prioritization on Integration eninge only.
I am good with queue prioritization and am able to successfully implement
the same. We are using only PI7.0.
My question is what is the technical difference between high priority
and low priority queues ? what technical setting makes it a high priority
queue and what technical setting makes a low priority queue ?
Your answer:
how the system reacts to new messages if almost all queues are already blocked
for some types of messages
My comment: what setting makes the system to behave like that ? what property
of that queue makes them to behave like that ?
Thanks
kumar -
Egress queueing - priority-queues and queue-sets
If I use the priority-queue out command on an interface 3750 does this treat queue1 as the priority queue?
How can I tell which traffic is sent to each queue by default? Or do I have to specifically define it such as
mls qos srr-queue output dscp-map queue 1 threshold 3 40 41 42 43 44 45 46 47
I really want dscp 40-47 to go priority and the rest to be spread evenly across the other 3 queues as the vast majority of the rest of the traffic will be 0. Is there a command that lets the other 3 queues be best effort?
Also, is this an OK config to use with priority-queueing? I don't actually want a large amount of bandwidth for the priority traffic, just for it to be expidited.
Queueset: 2
Queue : 1 2 3 4
buffers : 10 30 30 30
threshold1: 100 200 100 100
threshold2: 100 200 100 100
reserved : 50 50 50 50
maximum : 400 400 400 400
Any help very gratefully received.
Thanks, JSorry, just bouncing this to see if anyone around today can help :)
Maybe you are looking for
-
Strange behavior when creating a document with an "html" node
A strange thing is happening here. I'm using the javax.xml.transform.Transformer to save some XML documents. I can create documents with any arbitrary DOM tree I want, but if I have the root node have a name of "html". somehow the Transformer decides
-
Create a Business Object and add to transaction MASS
Hi folks, I would like to know if it's possible to create a business object for 2 tables and use this with standard transaction MASS for mass maintenance. I want to use transaction MASS for mass maintenance on the foreign trade data, 2 table will be
-
How to add a disk to a VM in order to be seen as a raw device?
I am running Hyper-V in Windows 8.1 Pro with Oracle Linux installed in the VM. I am running in the Linux VM an Oracle database (for testing purposes). I want to add a SSD which is seen as a raw device by the VM. Is this possible? How? As far as I und
-
Drop APEX Application via plsql
What sql command do i have to run if i wanna drop an apex application via script?
-
What is the typical lifetime of a PS version with respect to changing Mac operating systems? For instance, if I purchased CS5 today, based on recent history would it likely be compatible with 10.7 when that is released? 10.8? How often do you need to