多线程和高并发到底有什么区别呢?
多线程,比如在一个方法内通过new Thread()创建好几个线程执行任务。
高并发,比如有上百个请求同时访问同一个方法,由于执行方法是通过线程执行的。
所以我想问的是,并发场景是多线程吗?会造成线程安全问题吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
多线程,比如在一个方法内通过new Thread()创建好几个线程执行任务。
高并发,比如有上百个请求同时访问同一个方法,由于执行方法是通过线程执行的。
所以我想问的是,并发场景是多线程吗?会造成线程安全问题吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
高并发的最佳处理方案不是多线程,而是异步、不阻塞的单线程。
高并发不一定用多线程实现,nodejs、playframework通过异步非阻塞处理的方式实现高并发。
当然高并发肯定是存在多线程的,因为现在的服务器都是多cpu内核,所以nodejs,playframework一般都不是单线程,而是多少个cpu核心创建多少个线程。
Tomcat之类的使用多线程同步阻塞方式处理高并发,因为线程调度开销大,所以性能很多时候比nodejs,playframework之类的异步非阻塞方案要差很多。
区别是线程数目不同,比如tomcat,有多少并发访问就有多少线程,很容易上百上千,远超过cpu内核总数;而异步非阻塞的nodejs则使用固定的线程数,通常等于cpu内核数-1,比如15个或者31个等。但都会有多线程,线程安全问题自然都不可避免的存在。
不过Akka框架会让Actor都运行在同一个线程上,Akka通常以异步非阻塞方式运行,其环境往往是多线程的,比如不同的Actor运行在不同线程上,但Akka可以保证同一个Actor只运行在同一个线程中,这样,线程安全问题基本上就消除了。
这两个完全不是同一个纬度
多线程是一种技术手段,高并发是一种场景描述。。。当然不同,这两不是一个维度的
然后你第一个问题(并发场景是多线程吗?) 并发通常会运用多线程的手段
(会造成线程安全问题吗?)这个看你代码处理。多个方法共享成员变量会有的,如果你全是方法内变量 其实也就不存在,具体代码具体分析
首先要明白什么是并发什么是并行
并发:举一个例子 500个请求同时打到一台只有1核cpu的机器上,此时cpu需要来回切换去执行这五百个任务。
并行:同样500个请求同时打到一台500核cpu的机器上,则可以不用切换同时都执行任务。
所以不管并发还是并行都不会造成线程安全问题
线程安全问题的根本原因是“多个线程操作共享资源”
比如多线程进行一个int i的计数加减
可以关注我公众号“广孝go”加我微信,我详细和你说
高并发会涉及到多线程,但是也会涉及异步、分布式、集群