java - 应该如何理解高并发?理解apache服务和nginx对高并发的处理机制?

查看:128
本文介绍了java - 应该如何理解高并发?理解apache服务和nginx对高并发的处理机制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

看过很多关于并发的文章,但是现实开发中暂时没有遇到过,有些概念比较模糊。

先举例子

我们春节抢票回家,如果某趟车9点售票,a和b都在9:00:00(精确到微秒,甚至unix时间一样的),抢深圳到武汉的票。

问题如下

1.这属于并发吗?如果是并发,会产生什么结果(如用户数据混乱之类)。如果不是,如何才能产生并发的条件?
2.如果是并发, java是相对线程安全,如果12306的服务器语言是java的话,这样是不是就不会产生有危害的结果?如果还是会产生,是否可以使用队列解决?
3.如果12306的服务器是tomcat,是不是会消耗大量的CPU资源?如果用高性能服务器nginx和php组合处理业务,会不会更高(但php性能并没有java好)?

解决方案

问题很多,就我看到的问题来回答:

  • 这属于并发吗? 不一定。到服务器的逻辑处理处究竟是并发还是并行还是要看其机制。

  • 你说的数据混乱之类的,可能是指多线程操作一个对象而导致每个线程持有对象副本不一致而造成脏读脏写。就这里几个关键字你可以进行扩展搜索。

  • 线程安全不看语言。可以用队列解决,这里会有一个临界区的概念。

  • 消耗大量的cpu资源也是要看是什么样的操作的,比如大量的数据库持久化那么肯定是IO密集型操作,不吃CPU;反而要进行大量计算的,那么就是CPU密集型操作。在这里,如果真的是启动大量线程在后台服务器中运行,CPU会忙着切换线程而消耗尽其资源。

  • tomcat是个服务器,但它会不会消耗大量CPU资源还是得看你怎么使用的。同时它也是个容器,你在容器里跑app起大量线程,如之前所说,肯定会消耗大量CPU资源。就算你在ngnix+php里也会这样。

推荐我自己的一篇文章:Java多线程笔记(一):基础

这篇关于java - 应该如何理解高并发?理解apache服务和nginx对高并发的处理机制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆