package com.vm.engine.audio.realtime;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
public class WSListener extends WebSocketListener {
private Logger logger = Logger.getGlobal();
private static ExecutorService msgTaskService = null;
static {
//业务需要稳定性高,线程固定,将待办任务无限制放到Queue中(LinkedBlockingQueue),会消耗一定内存
msgTaskService=new ThreadPoolExecutor(
8,
8,
30000L,
TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
/*
CPU
物理CPU数(physical cpu)):指主板上实际插入物理CPU个数。
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
核数(Core):在单个物理CPU增加核心,也就是出现双核或多核,这样一个双核CPU同一时间可以运行两个进程/线程。
cat /proc/cpuinfo | grep "cpu cores" | uniq
逻辑处理器数(Processor):在单个core为了提高处理能力逻辑上划分为多个。
cat /proc/cpuinfo | grep "processor" | wc -l
JAVA获取JVM可用的核心数
Runtime.getRuntime().availableProcessors()
核心线程数设置方式:
CPU密集型
CPU密集型任务有大量计算,消耗CPU资源,比如视频的编解码这种都是比较耗时间的操作,线程任务越多花在任务切换的时间就越多,应该减少线程的数量,CPU密集型任务线程数应该等于CPU的核心数。
IO密集型
IO密集型CPU消耗比较少,大部分时间都在等待IO,线程越多效率越高但也有限度,我们一般应用都是属于这种,核心线程数=CPU核心数*2.
*/
}
public WSListener() {
}
public void business(String aa,String bb) {
// 这里一定不要阻塞
msgTaskService.execute(() -> {
//处理业务
logger.info("线程池线程"+Thread.currentThread().getId());
} catch (JSONException e) {
logger.info(Thread.currentThread().getId()+" - 线程JSONException - 【报错】"+e);
throw new RuntimeException(e);
}
});
}
}