多线程和高并发到底有什么区别呢?

发布于 2022-09-12 01:44:49 字数 125 浏览 13 评论 0

多线程,比如在一个方法内通过new Thread()创建好几个线程执行任务。
高并发,比如有上百个请求同时访问同一个方法,由于执行方法是通过线程执行的。

所以我想问的是,并发场景是多线程吗?会造成线程安全问题吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

爱冒险 2022-09-19 01:44:49

高并发的最佳处理方案不是多线程,而是异步、不阻塞的单线程。

友欢 2022-09-19 01:44:49

高并发不一定用多线程实现,nodejs、playframework通过异步非阻塞处理的方式实现高并发。

当然高并发肯定是存在多线程的,因为现在的服务器都是多cpu内核,所以nodejs,playframework一般都不是单线程,而是多少个cpu核心创建多少个线程。

Tomcat之类的使用多线程同步阻塞方式处理高并发,因为线程调度开销大,所以性能很多时候比nodejs,playframework之类的异步非阻塞方案要差很多。

区别是线程数目不同,比如tomcat,有多少并发访问就有多少线程,很容易上百上千,远超过cpu内核总数;而异步非阻塞的nodejs则使用固定的线程数,通常等于cpu内核数-1,比如15个或者31个等。但都会有多线程,线程安全问题自然都不可避免的存在。

不过Akka框架会让Actor都运行在同一个线程上,Akka通常以异步非阻塞方式运行,其环境往往是多线程的,比如不同的Actor运行在不同线程上,但Akka可以保证同一个Actor只运行在同一个线程中,这样,线程安全问题基本上就消除了。

为你鎻心 2022-09-19 01:44:49

这两个完全不是同一个纬度

软糯酥胸 2022-09-19 01:44:49

多线程是一种技术手段,高并发是一种场景描述。。。当然不同,这两不是一个维度的

然后你第一个问题(并发场景是多线程吗?) 并发通常会运用多线程的手段
(会造成线程安全问题吗?)这个看你代码处理。多个方法共享成员变量会有的,如果你全是方法内变量 其实也就不存在,具体代码具体分析

岁月静好 2022-09-19 01:44:49

首先要明白什么是并发什么是并行

并发:举一个例子 500个请求同时打到一台只有1核cpu的机器上,此时cpu需要来回切换去执行这五百个任务。
并行:同样500个请求同时打到一台500核cpu的机器上,则可以不用切换同时都执行任务。

所以不管并发还是并行都不会造成线程安全问题

线程安全问题的根本原因是“多个线程操作共享资源”

比如多线程进行一个int i的计数加减

可以关注我公众号“广孝go”加我微信,我详细和你说

勿忘初心 2022-09-19 01:44:49

高并发会涉及到多线程,但是也会涉及异步、分布式、集群

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文