ehcache
redis
ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
如果是单个应用或者对缓存访问要求很高的应用,用ehcache。
如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。
补充下:ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。
作者:王卫东
来源:CSDN
原文:https://blog.csdn.net/wwd0501/article/details/79229176
版权声明:本文为博主原创文章,转载请附上博文链接!
rmi: Remote Method Invocation:远程方法调用
RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。
电商+缓存
福利社首页:轮播图,专题分类,热门推荐
商品详情
订单:购物车订单,已购订单,
提交地址信息,物流追踪
固定不变的可以查询的都可以做缓存,
而向订单这样的,秒杀订单这样的,直接放在数据库行吗?
小型的电商系统查询压力比较大,订单提交的并发量相对来说是不大的,
阿里双十一,这样的并发订单提交,直接放在数据库行吗?
参考:
https://www.cnblogs.com/zhangweizhong/p/5884761.html
https://yq.aliyun.com/articles/328515
消息队列的作用是什么?
https://www.oschina.net/translate/top-10-uses-for-message-queue
解耦合
削峰:高并发写入请求,
cpu核数+进程+线程
https://my.oschina.net/u/209067/blog/1795376
windows操作系统(本地)的进程和线程
对于windows来说,进程和线程的概念都是有着明确定义的,进程的概念对应于一个程序的运行实例(instance),而线程则是程序代码执行的最小单元。
windows下,一个典型的线程拥有自己的堆栈、寄存器(包括程序计数器PC,用于指向下一条应该执行的指令在内存中的位置),
而代码段、数据段、打开文件这些进程级资源是同一进程内多个线程所共享的。
因此同一进程的不同线程可以很方便的通过全局变量(数据段)进行通信,大家都可以对数据段进行读写,这很方便,也被在安全性方面诟病,因为它要求程序员时刻意识到这些数据不是线程独立的。
linux操作系统进程和线程
对于linux来说,则没有很明确的进程、线程概念。
首先linux只有进程而没有线程,然而它的进程又可以表现得像windows下的线程。
linux利用fork()和exec函数族来操作多线程。
jvm封装进程和线程和本地操作系统进程和线程
进程和线程:
操作系统的调度单位
可以看作是操作系统“资源”
java作为与平台无关的变成语言,必然会对操作系统提供的功能进行进一步的封装,以平台无关的编程接口共程序员使用
在java语言中,对进程和线程的封装,分别提供了process和thread相关的一些类
1.如何使用这些类来创造进程和线程
2.然后介绍这些类是如何和操作系统本地进程线程相对应的
3.给出了java虚拟机对这些封装类的实现(概要)
4.java进程线程和本地进程线程做了比较
5.列出了使用java进程,线程的一些限制和需要注意的问题
jvm进程和本地进程:
通过上面对 Java 进程的分析,其实它在实现上就是创建了操作系统的一个进程,也就是每个 JVM 中创建的进程都对应了操作系统中的一个进程。但是,Java 为了给用户更好的更方便的使用,向用户屏蔽了一些与平台相关的信息,这为用户需要使用的时候,带来了些许不便。
jvm线程和本地线程:
从上我们知道,Java 线程是建立在系统本地线程之上的,是另一层封装,其面向 Java 开发者提供的接口存在以下的局限性:
编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
任务调度:
大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。
任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。
这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发。
1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
4.调度和切换:线程上下文切换比进程上下文切换要快得多。
多线程与多核
多核(心)处理器是指在一个处理器上集成多个运算核心从而提高计算能力,
也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。
内核线程(Kernel Thread, KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。
一般一个处理核心对应一个内核线程,比如单核处理器对应一个内核线程,双核处理器对应两个内核线程,四核处理器对应四个内核线程。
超线程技术将一个物理处理核心模拟成两个逻辑处理核心,对应两个内核线程,所以在操作系统中看到的CPU数量是实际物理CPU数量的两倍.
程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP),轻量级进程就是我们通常意义上所讲的线程(我们在这称它为用户线程),由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。
多对多模型的优点有:1.一个用户线程的阻塞不会导致所有线程的阻塞,因为此时还有别的内核线程被调度来执行;2.多对多模型对用户线程的数量没有限制;3.在多处理器的操作系统中,多对多模型的线程也能得到一定的性能提升,但提升的幅度不如一对一模型的高。
总结
可以根据cpu核数估计计算资源的分配;