class Pools {

    static ExecutorService createDefaultPool() {
        int corePoolSize, maxPoolSize;
        if (GdsEdition.instance().isOnEnterpriseEdition()) {
            corePoolSize = Runtime.getRuntime().availableProcessors();
            maxPoolSize = corePoolSize * 2;
        } else {
            corePoolSize = maxPoolSize = CONCURRENCY_LIMITATION;
        }

        return new ThreadPoolExecutor(
            corePoolSize,
            maxPoolSize,
            30L,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(corePoolSize * 50),
            NamedThreadFactory.daemon(THREAD_NAME_PREFIX),
            new CallerBlocksPolicy()
        );
    }

    private  Pools();

}