并行模式
大力海棠
蓝桥杯Java组个人赛省二,麻瓜ACMer的北京尚学堂·百战程序员( ̄y▽ ̄)~*
展开
-
无锁缓存框架Disruptor如何解决伪共享问题?
无锁的生产者–消费者在上一篇使用BlockingQueue队列实现的生产者–消费者模式中,从BlockingQueue队列的源码可以看到两点值得注意,第一是为了保证线程安全,BlockingQueue使用了重入锁。第二,为了实现缓冲区满时,生产者等待,缓冲区空时,消费者等待,以及何时唤醒生产者/消费者的问题,使用了Condition来完成线程阻塞与唤醒。既然选择了使用锁来完成线程同步,那么在多...原创 2019-05-27 17:02:29 · 832 阅读 · 1 评论 -
并行设计模式:并行流水线与并行查找
流水线与指令重排我们知道进程切换开销是很大的,CPU首先保存当前被中断进程现场,然后把系统堆栈指针保存到PCB中,接着去处理中断,选择下一个占用CPU的进程。引入线程的目的就是减少了系统的时空开销,因为现在多核处理器已经十分普遍,设想如果一个程序它只有一个线程,那么在一个双核处理器上运行该程序,那么同一时刻只有一个核在运行,另一个核就处于空闲状态,导致系统资源浪费。程序使用多线程,可以充分利用...原创 2019-06-03 17:01:52 · 2985 阅读 · 0 评论 -
先提交后获取:Future和FutureTesk的异步执行
在上一篇日志中,并行执行下的多线程协作完成查找操作里,我让每一个查找线程实现了Callable接口,从主线程中也看到,使用了Future<Integer>泛型接口来接收线程的返回结果。想了一下,觉得有必要补上一篇日志,总结下自己对Future模式的学习。使用Runnable还是Callable?通常我们创建线程都是继承或实现Runnable接口,使用Callable接口和Run...原创 2019-06-10 17:04:33 · 711 阅读 · 0 评论 -
Immutable Object不可变对象模式
为什么要不可变对象不可变对象,指的是该对象一旦被创建后,对象的内部状态是对外隐藏的,其他线程没有办法修改对象的内部状态或数据,当然对象自己内部也不会对自己做修改,整个对象可以说像是“只读”的。你可能会觉得奇怪,创建一个不可修改的对象有什么意义。想一想你电脑上的一些属性为“只读”的文件,之所以它们设置为“只读”,是因为它们不希望自己的数据被别人修改,一直保持文件数据的一致性和正确性。看到“一...原创 2019-07-01 16:58:33 · 1011 阅读 · 0 评论 -
使用NIO构建服务器端和客户端(下)
NIO搭建服务器端-ServerSocketChannel如果你看完了上一篇日志,相信你已经万事俱备,搞明白通道Channel、数据包装Buffer和选择器Selector。那么就来用上这些组件,搭建一个非阻塞式的,更高性能的服务器端和客户端吧!首先来看看最核心的服务器部分:package com.justin.nioclient;import java.io.IOExcepti...原创 2019-06-24 16:59:15 · 650 阅读 · 0 评论