Java多线程MasterWorker模式如何在高并发情况下优化 高并发服务器 master 和worker 之间怎么通信

\u5982\u4f55\u638c\u63e1java\u591a\u7ebf\u7a0b\uff0c\u9ad8\u5e76\u53d1\uff0c\u5927\u6570\u636e\u65b9\u9762\u7684\u6280\u80fd

\u603b\u662f\u770b\u89c1\u6709\u90e8\u5206sb\u8981\u56de\u7b54\u4f60\u4e0d\u80fd\u597d\u597d\u56de\u7b54\u3002\u4e0d\u77e5\u9053\u4f60\u4e2b\u80fd\u4e0d\u80fd\u95ed\u5634\uff1f
\u591a\u7ebf\u7a0b+\u5e76\u53d1\uff0c\u770bjava\u5e76\u53d1\u7f16\u7a0b\u8be6\u89e3\uff0c90%\u4ee5\u4e0a\u4f1ajava\u591a\u7ebf\u7a0b\u7684\u7a0b\u5e8f\u5458\u90fd\u4ece\u8fd9\u672c\u4e66\u4e0a\u5b66\u7684\u3002\u8981\u8003\u8651\u9ad8\u5e76\u53d1\uff0c\u6df1\u523b\u7406\u89e3\u591a\u7ebf\u7a0b\uff0c\u5e76\u53d1\uff0c\u53ea\u6709java\u7684\u77e5\u8bc6\u4e0d\u591f\uff0c\u9700\u8981\u770b\u64cd\u4f5c\u7cfb\u7edf\u6838\u5fc3\u7f16\u7a0b\u4e4b\u7c7b\u7684\u4e66\u7c4d\uff0c\u524d\u63d0\u5f97\u4f1ac\u7f16\u5199\u8fb9\u505a\u8fb9\u7406\u89e3\u3002\u64cd\u4f5c\u7cfb\u7edf\u5e95\u5c42\u7ed9\u5b83\u6252\u4e2a\u5e95\u671d\u5929\u3002java\u7684\u591a\u7ebf\u7a0b\u662f\u57fa\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\uff0c\u6362\u53e5\u8bdd\u8bf4java\u7684\u591a\u7ebf\u7a0b\u4f9d\u8d56\u64cd\u4f5c\u7cfb\u7edf\u7684\u591a\u7ebf\u7a0b\u5b9e\u73b0\u3002\u64cd\u4f5c\u7cfb\u7edf\u6838\u5fc3\u7f16\u7a0b\uff08windows\uff09\u6216\u64cd\u4f5c\u7cfb\u7edf\u9ad8\u7ea7\u7f16\u7a0b\uff08unix\u7cfb\u7684\uff09\u4f1a\u628a\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406\u8bf4\u5f97\u5f88\u900f\u5f7b\uff0c\u5f53\u7136\u5305\u62ec\u7ebf\u7a0b\u3002
\u9664\u4e86\u4e0a\u9762\u7684\u77e5\u8bc6\uff0c\u8fd8\u9700\u8981\u6df1\u523b\u4e86\u89e3tcp/ip\u534f\u8bae\u4ee5\u53ca\u5957\u63a5\u5b57\u7f16\u7a0b\uff0c\u4ee5\u53ca\u5e38\u7528\u7684tcp\uff0cudp\uff0csctp\u7684\u5e94\u7528\uff0c\u5982http\uff0cftp\uff0csmtp\uff0cpop3\uff0crpc\u7b49\u7b49\u5e94\u7528\u7ea7\u534f\u8bae\u3002
\u5927\u6570\u636e\u9700\u8981\u6570\u636e\u5e93\u652f\u6491\uff0c\u6570\u636e\u5e93\u7684\u5148\u4f1a\u5427\uff01\u8fd9\u4e2a\u4e00\u73ed\u4e0d\u91cd\u8981\u3002\u5927\u6570\u636e\u7740\u5757\u91cd\u8981\u7684\u529f\u80fd\u662f\u5982\u4f55\uff0c\u4f7f\u7528\u5206\u6790\u6d77\u91cf\u6570\u636e\u63d0\u53d6\u6709\u7528\u4fe1\u606f\u3002\u9700\u8981\u9488\u5bf9\u4e0d\u540c\u9886\u57df\u505a\u5206\u6790\u4f7f\u7528\u3002\u6bd4\u5982\u4e00\u4e2a\u6c14\u8c61\u6570\u636e\uff0c\u5bf9\u5356\u7a7a\u8c03\u3001\u5356\u51b0\u7bb1\u7684\u4eba\u4ed6\u4eec\u5173\u5fc3\u5565\uff0c\u8981\u80fd\u63d0\u4f9b\u5bf9\u5e94\u7684\u6570\u636e\u7ed9\u4ed6\u4eec\u3002\u5bf9\u5356\u670d\u88c5\u7684\u4eba\uff0c\u4ed6\u4eec\u53c8\u5173\u5fc3\u5565\uff1f\u8981\u63d0\u4f9b\u54ea\u4e9b\u6570\u636e\u7ed9\u4ed6\u4eec\uff1f\u5bf9\u519c\u540d\uff0c\u4ed6\u4eec\u53c8\u5173\u5fc3\u5565\uff0c\u8981\u63d0\u4f9b\u54ea\u4e9b\u6570\u636e\u7ed9\u4ed6\u4eec\uff1f\u8bf4\u5927\u5e95\u3002\u5927\u6570\u636e\u6240\u5173\u5fc3\u7684\u95ee\u9898\u662f\u5982\u4f55\u63d0\u4f9b\u6709\u6548\u670d\u52a1\uff08\u6323\u94b1\u70b9\uff09\uff0c\u9700\u8981\u4e86\u89e3\u5f88\u591a\u5177\u4f53\u884c\u4e1a\u77e5\u8bc6\u3002
\uff08\u5904\u7406\u5927\u6570\u636e\u7684\u7a0b\u5e8f\uff0c\u7565\u8fc7\uff0c\u771f\u4e0d\u662f\u592a\u96be\u7684\u4e8b\uff0c\u4f60\u5b66\u5f97\u61c2\u7b2c\u4e8c\uff0c\u7b2c\u4e09\u6bb5\u63cf\u8ff0\u7684\u5185\u5bb9\uff0c\u8981\u7406\u89e3\u5927\u6570\u636e\u7684\u4e00\u4e9b\u4ee3\u7801\u67b6\u6784\u5b9e\u73b0\u4e0d\u96be\uff09

Nginx\u4f1a\u6309\u9700\u540c\u65f6\u8fd0\u884c\u591a\u4e2a\u8fdb\u7a0b\uff1a\u4e00\u4e2a\u4e3b\u8fdb\u7a0b(master)\u548c\u51e0\u4e2a\u5de5\u4f5c\u8fdb\u7a0b(worker)\uff0c\u914d\u7f6e\u4e86\u7f13\u5b58\u65f6\u8fd8\u4f1a\u6709\u7f13\u5b58\u52a0\u8f7d\u5668\u8fdb\u7a0b(cache loader)\u548c\u7f13\u5b58\u7ba1\u7406\u5668\u8fdb\u7a0b(cache manager)\u7b49\u3002Nginx\u4e3b\u8981\u901a\u8fc7\u201c\u5171\u4eab\u5185\u5b58\u201d\u7684\u673a\u5236\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u901a\u4fe1\u3002\u4e3b\u8fdb\u7a0b\u4ee5root\u7528\u6237\u8eab\u4efd\u8fd0\u884c\uff0c\u800cworker\u3001cache loader\u548ccache manager\u5747\u5e94\u4ee5\u975e\u7279\u6743\u7528\u6237\u8eab\u4efd\u8fd0\u884c\u3002

\u3000\u3000\u5728\u5de5\u4f5c\u65b9\u5f0f\u4e0a\uff0cNginx\u5206\u4e3a\u5355\u5de5\u4f5c\u8fdb\u7a0b\u548c\u591a\u5de5\u4f5c\u8fdb\u7a0b\u4e24\u79cd\u6a21\u5f0f\u3002\u5728\u5355\u5de5\u4f5c\u8fdb\u7a0b\u6a21\u5f0f\u4e0b\uff0c\u9664\u4e3b\u8fdb\u7a0b\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u5de5\u4f5c\u8fdb\u7a0b\uff0c\u5de5\u4f5c\u8fdb\u7a0b\u662f\u5355\u7ebf\u7a0b\u7684\uff1b\u5728\u591a\u5de5\u4f5c\u8fdb\u7a0b\u6a21\u5f0f\u4e0b\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u8fdb\u7a0b\u5305\u542b\u591a\u4e2a\u7ebf\u7a0b\u3002Nginx\u9ed8\u8ba4\u4e3a\u5355\u5de5\u4f5c\u8fdb\u7a0b\u6a21\u5f0f\u3002

你说的Master指的是java的线程池吧,我之前做过一个项目,因为项目在内网拿不出来,我给你说一下我那次的经验。

几个关键点:

1、java线程池:使用java提供的ThreadPoolExecutor类构造主池,再构造一个辅池(辅池的作用在于当主池进入拒绝策略的时候,可以启动辅池,帮助主池分担一部分线程,或者在主池shutdown的瞬间又有任务进来,也会走到拒绝策略,此时可以启动辅池处理这些线程,一般情况下辅池不会启动),排队策略使用LinkedBlockingQueue队列。

2、单例模式:利用spring的IOC容器的单例性,每次取线程池时,从IOC容器中注入。创建一个组件类BatPool(spring组件默认为单例),里面再使用单例模式创建线程池,单例中的单例,保证单例性:


@Component

class BatPool{

private ThreadPoolExecutor mainPool;

ThreadPoolExecutor create(){

if(mainPool== null){

   retrun new ThreadPoolExecutor();

}else{

 retrun mainPool;

}

...

}


业务中:

@Autowired

BatPool batPool;

ThreadPoolExecutor pool = batPool.create();

...


线程池的配置你自己参考网上吧

这样在业务中,每次取到的池都是同一个池,不会多次创建。

如果你没有使用spring的话,我再想想办法怎么实现全局的单例模式



Master-Worker是常见的并行设计模式。
核心思想是: 系统中有两个进程协议工作。Master进程负责接收和分配任务,Worker负责处理子任务。当worker进程将子任务处理完毕之后,将结果返回给Master进程,由Master进行归纳和汇总。
优势:可以将大任务分解成若干小任务,并发执行,从而提高系统性能。对于客户端(请求发起者)来说,任务一旦提交,Master进程就会立刻分配任务并立刻返回,并不会等待系统处理完再返回,其处理过程是异步的。

扩展阅读:java入门网站 ... mybatis ... java线程池配置参数 ... python基础教程 ... javascript入门 ... python是什么意思 ... spring boot ... java多线程查询数据库 ... rabbitmq ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网