Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

websocket onmessage下的并发问题

问题:
我接入了某个websocket服务,这个服务返回消息很多很快,毫秒级别的频繁返回。但我这的onMessage回调内,处理的逻辑还比较复杂的。最近,调试过程中,感觉我这似乎程序有阻塞。想请问下如何解决这样的问题?
如果使用线程处理还是有大量线程开启和关闭的问题,而且服务返回的频率太高,这样得启好多线程?

详细描述
为了更清楚的说明我的问题,自己本地也做了如下测试模拟:
模拟一
20200615135754.jpg
如上图所示,模拟一个服务端快速返回,客户端处理较慢的情况,结果是客户端的执行就是被阻塞了,后面的逻辑排队等前面的逻辑处理完再执行,当然,竟然没有被漏掉和打断的。
模拟二
改用worker_threads,程序不阻塞,由线程去处理逻辑,有结果了再返回,如下图:
20200615155442.jpg
20200615160044.jpg
20200615155459.jpg

请各位指点下~


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

CPU 密集型?

那选型就不对,Node.js 因为异步 I/O 的特点,在 I/O 密集型上有一定优势;而因为单线程的关系,在 CPU 密集型上没有任何优势。

这种情况下在多核 CPU 上只能靠子线程来解决(单核上无解),防止因运算而阻塞了主线程。多线程的话可以考虑使用 cluster 模块,有线程池,比你自己手工维护线程要好很多。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...