View Javadoc
1   package com.github.dexecutor.executor.support;
2   
3   /**
4    * 
5    * @author Nadeem Mohammad
6    *
7    */
8   public final class ThreadPoolUtil {
9   	
10  	private ThreadPoolUtil() {
11  		
12  	}
13  	/**
14  	 * Each tasks blocks 90% of the time, and works only 10% of its
15  	 *	lifetime. That is, I/O intensive pool
16  	 * @return io intesive Thread pool size
17  	 */
18  	public static int ioIntesivePoolSize() {
19  		
20  		double blockingCoefficient = 0.9;
21  		return poolSize(blockingCoefficient);
22  	}
23  
24  	/**
25  	 * 
26  	 * Number of threads = Number of Available Cores / (1 - Blocking
27  	 * Coefficient) where the blocking coefficient is between 0 and 1.
28  	 * 
29  	 * A computation-intensive task has a blocking coefficient of 0, whereas an
30  	 * IO-intensive task has a value close to 1,
31  	 * so we don't have to worry about the value reaching 1.
32  	 *  @param blockingCoefficient 
33  	 *  @return Thread pool size
34  	 */
35  	public static int poolSize(double blockingCoefficient) {
36  		int numberOfCores = Runtime.getRuntime().availableProcessors();
37  		int poolSize = (int) (numberOfCores / (1 - blockingCoefficient));
38  		return poolSize;
39  	}
40  }