并发 -- 12




1 2

200x200


引言前面的文章中,我们介绍了 python 中的进程与线程模型我们看到,由于 GIL 锁的存在,python 中的线程效率并不高,也不能利用多核&nb

#操作系统    #os    #进程    #线程   

200x200


引言此前的文章中,我们详细介绍了 python 中的协程python 的协程 协程是在用户进程中,按照用户预先设定的执行流程进行上下文切换,从而在开销远小于多线程/多进程

#读书笔记    #python    #并发    #concurrent   

200x200


引言我们已经介绍了 python 的几种线程同步工具Python 线程同步(一) -- 竞争条件与线程锁python 线程同步(二) -- 条件对象python 线程同步(三) -

#thread    #线程同步    #事件    #并发   

200x200


引言上一篇文章中我们介绍了 Python 中的线程与用法python 的线程 一旦引入并发,就有可能会出现竞争条件,有时会出现意想不到的状况  上图中

#线程    #锁    #线程同步    #死锁   

200x200


引言上一篇文章中,我们详细介绍了 python 中的协程python 的协程 python 通过 yeild 关键字让出 CPU&

#技术帖    #python    #线程    #thread   

200x200


引言上一篇文章中,我们介绍了 Python 中的 yield 关键字以及依赖其实现的生成器函数python 中的迭代器与生成器 生成器函数在形式上与协

#python    #并发    #调度    #装饰器   
Runnable 与 Callable上一篇日志中,我们设计了一个使用 ExecutorService 与 Runnale 接口创建线程的例子Executor 框架及线程池的使用此前我们介绍过 Runnable 与 Callable 的区别,Runnable 接口的 run 方法不能抛出异常也不具有返回值,而实际的使用中,我们常常需要在并发过程中获取每个线程的返回值,这时我们就需要 Callable 接口 使用 Future 收集线程执行结果最基本的线程执行结果收集方法是使用 Future 对象:package com.techlog.test.service; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executo
#技术帖    #龙潭书斋    #线程    #thread   
概述延迟任务就是诸如“在 100ms 以后执行”这样的任务,而周期任务则是“每 10ms 执行一次”这样的任务延迟任务与周期任务通常通过 Timer 类负责实现和管理,但是 Timer 类是基于绝对时间而不是相对时间的调度机制,系统时钟的变化会直接影响到 Timer 的执行结果,这是 Timer 的一个明显的缺陷,另一个缺陷在于 Timer 在执行所有定时任务时只会创建一个线程,所有任务的调度延迟时间都是基于上一个任务的结束时间,这样如果某个任务执行时间过长,那么将会破坏其他任务的执行,同时,一旦任务抛出了一个未知的异常,由于 Timer 线程不捕获异常也并不会尝试恢复,因此他会彻底停止执行和调度,这个问题通常被称为“线程泄漏”ScheduledThreadPoolExecutor 是替代 Timer 的一个比较好的组件,他是通过相对时间进行控制的,不依赖于系统时钟,同时任务的每次执行时间都是基于上一次任务的开始时间计算,结合并发的特性,实现了每次调度不依赖于每次实际的任务执行时间,通过 Executors 对象的工厂方法 newScheduledThreadPoo
#技术帖    #龙潭书斋    #线程    #线程池   
概述java 在类库设计的过程中,对线程安全做了额外的考虑,因此诞生了丰富的线程安全容器类以及用于协调多个相互写作的线程控制流的同步工具类,特别是在 java5 和 java6 中引入了一些新模块,用来构造并发应用程序的一些常用模式 同步容器类众所周知,HashMap 和 ArrayList 等常用的容器类并不是线程安全的,但在单线程模型下,他们有着很好的执行效率早期,java 通过加锁的方式实现了两个线程安全的同步容器类:Vector 和 Hashtable我们也可以使用 java 类库中提供的 Collections 类的 synchronizedXxxx 方法来创建非线程安全容器的同步容器类如:List<Widget> widgetList = Collections.synchronizedList(new ArrayList<Widget>());  同步容器类的问题同步容器类是线程安全的,但是有些情况下需要客户端加锁来保护复合操作常见的复合操作包括:迭代(遍历容器)跳转(找到下一个元素)条件运算虽然同步容器类的所有操作都是线程安全的,但是当其他线程修
#读书笔记    #技术帖    #龙潭书斋    #sync   
概述此前,我们曾经介绍过 linux 下的进程和线程:线程的基本概念本篇日志中,我们来介绍一下 java 的线程并发模型,主要来看看 java 的线程有哪些优势与潜在的危险 线程的优势多线程并发编程的优势是显而易见的:发挥多处理器的强大能力简化任务模型简化异步事件的处理,降低开发难度任务的快速响应 安全性问题正如此前的日志中详细介绍过的 linux 线程中复杂的安全性问题,java 线程安全性问题也是同样复杂多个线程的执行顺序是不可预测的,因此可能会产生奇怪的结果 public class UnsafeSequence { private int value; public int getNext() { return value++; } } 上面的代码是非线程安全的,尽管这个类中仅仅包含的 getNext 方法看上去非常简单,但它包含了三个操作:读取 value将 value + 1将结果写入 value在多线程并发的情况下,第一个线程还没有执行到第三步时,第二个线程读取 value,那么两个线程将读取到同一个 value 值,因此他们通过加
#技术帖    #技术分享    #线程    #多线程   
1 2



京ICP备15018585号