云计算分布式消息队列有哪些
有以下几种:
ActiveMQ:每个人一开始都使用ActiveMQ,但是现在确实每个人都没有使用太多。 尚未通过大规模吞吐量方案验证,社区也不是很活跃。 单台机器的吞吐量为10,000级,并且吞吐量低于RocketMQ和Kafka。 这是一个数量级,响应为ms级,有较低数据丢失的可能性。
RabbitMQ:单机吞吐率是万级,吞吐率比RocketMQ和Kafka低一个数量级,但是它适合中小企业,因为它具有友好的监视和维护界面,社区相对活跃,几乎每个月都会发布几个版本,近年来,一些国内的互联网公司更多地使用了rabbitmq,但问题也很明显。 RabbitMQ的吞吐量确实较低。 这是因为他做的实现机制比较繁重,而且该语言国内会的不多。
RocketMQ:单机吞吐量为100,000级。 RocketMQ还是一种可以支持高吞吐量的MQ。 主题可以达到数百或数千个级别,并且吞吐量将略有下降。 这是RocketMQ的主要优势。 在同一台机器上,它可以支持大量topic,可用性非常高,源代码是JAVA。
Kafka:单机吞吐量为100,000级。 这是Kafka的最大优势,即高吞吐量。 通常与大数据系统配合执行实时数据计算,日志收集等场景。 当topic从数十个变为数百个时,吞吐量将大大下降
JAVA如何用队列实现并发
如果是抢资源,在不作弊的情况下 按照先来先得的规则 ,那么比较简单的实现就是队列 ,不管请求的并发多高,如果用线程来实现为用户服务,也就是说 来一个人请求资源那么就启动一个线程,那CPU执行线程总是有顺序的,比如 当前三个人(路人甲路人乙路人丙)请求A资源 ,那服务端就起了三个线程为这三个人服务,假设 这三个人不太幸运在请求的时候没有及时的获得CPU时间片,那么他们三个相当于公平竞争CPU资源,而CPU选择运行线程是不确定顺序的 ,又假设 选中了路人丙的线程运行那么将其放入队列就好了,路人乙,路人丙以此类推 ,那可能会想为什么不及时的处理呢 ,因为后续的操作可能是耗时操作对于线程的占用时间较长那请求资源的人多了服务端就可能挂了
java进程间通讯的有几种方法
JAVA进程间通信的方法主要有以下几种: (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送 信号给进程本身。 (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。 (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。 (6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。 (7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。 (8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

