/[projects]/dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java
ViewVC logotype

Annotation of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2148 - (hide annotations) (download)
Wed Apr 30 13:34:24 2014 UTC (10 years, 1 month ago) by torben
File size: 3925 byte(s)
Undgå at lav busy-wait ved buffer underruns
1 torben 2145 package dk.daoas.fulddaekning;
2    
3     import java.io.File;
4     import java.io.FileReader;
5     import java.util.Map;
6     import java.util.Properties;
7     import java.util.concurrent.ConcurrentHashMap;
8     import java.util.logging.Level;
9     import java.util.logging.Logger;
10    
11     import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
12    
13     public class Lookup {
14     static int max_workers;
15     static boolean verbose;
16    
17     static Properties conf;
18     static Logger logger = Logger.getLogger( Lookup.class.toString() );
19    
20 torben 2147
21 torben 2145 Database db;
22 torben 2147 WorkSet workset;
23 torben 2145
24     Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
25    
26    
27    
28 torben 2147 public Lookup(WorkSet workset, Database db) {
29 torben 2145 this.db = db;
30 torben 2147 this.workset = workset;
31 torben 2145 }
32    
33    
34    
35     public void doLookup() throws BoundingBoxException {
36 torben 2147 logger.info("Starting for postnr=" + workset.postnr);
37 torben 2145
38     long start1 = System.currentTimeMillis();
39     long start2 = 0;
40    
41     try {
42 torben 2147
43     logger.info("Starter beregning for " + workset.postnr);
44 torben 2145 start2 = System.currentTimeMillis();
45    
46     for (int i =0; i<max_workers; i++) {
47     LookupWorker worker = new LookupWorker(i, this);
48     Thread t = new Thread(worker);
49     t.start();
50    
51     workers.put(i, worker);
52     }
53    
54     while (workers.size() > 0) {
55     Thread.sleep(10);//wait for worker threads
56     }
57    
58    
59     } catch(Exception e) {
60     logger.log(Level.WARNING, "Exception during lookup", e);
61    
62     if (e instanceof BoundingBoxException) {
63     logger.severe( e.getMessage() );
64     System.exit(1);
65     }
66    
67     }
68     long now = System.currentTimeMillis();
69    
70 torben 2147
71     logger.info("Antal daekkede:" + workset.daekkedeAdresser.size() );
72     logger.info("Antal ikke-daekkede:" + workset.queueSize );
73 torben 2145 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) );
74     }
75    
76     public void shutdownWorker(int workerid) {
77     logger.info("Shutting down worker: " + workerid);
78     workers.remove(workerid);
79     }
80    
81     // Getters and setters
82    
83     ///////////////////////////
84     public Database getDb() {
85     return db;
86     }
87 torben 2147
88     public WorkSet getWorkSet() {
89     return workset;
90 torben 2145 }
91    
92    
93     /////////////////////////////
94     // Static functions
95    
96    
97    
98    
99     public static void main(String[] args) throws Exception {
100    
101     File confFile = new File("fulddaekning.properties");
102     if (! confFile.exists() ) {
103     logger.warning("Config file not found");
104     System.exit(1);
105     }
106    
107     conf = new Properties();
108     conf.load( new FileReader(confFile) );
109    
110     max_workers = Integer.parseInt( conf.getProperty("MAX_WORKERS") );
111     logger.info("Starting with MAX_WORKERS:" + max_workers);
112    
113     verbose = Boolean.parseBoolean( conf.getProperty("VERBOSE") );
114     logger.info("Starting with VERBOSE:" + verbose);
115    
116 torben 2147 Database db = new Database(conf);
117     db.resetResultTable();
118 torben 2145
119    
120 torben 2147 InputWorker inputWorker = new InputWorker(db);
121     Thread inputThread = new Thread(inputWorker);
122     inputThread.start();
123 torben 2145
124    
125     long start = System.currentTimeMillis();
126 torben 2147 boolean doContinue = true;
127 torben 2145
128 torben 2147 while (inputWorker.queue.isEmpty() == true) {
129     Thread.sleep(3); //Vent indtil at første arbejds sæt er på plads
130     }
131    
132    
133     while ( doContinue == true ) {
134     WorkSet set = inputWorker.queue.poll();
135    
136     if (set != null) {
137     Lookup lookup = new Lookup(set, db);
138     lookup.doLookup();
139     } else {
140     System.out.println("Buffer underrun");
141 torben 2148 Thread.sleep(100);
142 torben 2147 }
143    
144     if ( inputWorker.isDone == true && inputWorker.queue.isEmpty() == true)
145     doContinue = false;
146     }
147    
148     /*logger.info("Finder postnumre");
149 torben 2145 List<Integer> postnumre = db.hentPostnumre();
150    
151     for(Integer postnr : postnumre) {
152     Lookup lookup = new Lookup(postnr, db);
153     lookup.doLookup();
154 torben 2147 }*/
155 torben 2145
156     long now = System.currentTimeMillis();
157    
158     logger.info("Fuld load done : " + (now-start) );
159    
160    
161     //Lookup lookup = new Lookup(7400, db);
162     //lookup.doLookup();
163     }
164    
165    
166    
167     }

  ViewVC Help
Powered by ViewVC 1.1.20