目标 GStreamer会自动处理多线程这部分,但在有些情况下,你需要手动对线程做解耦.本教程会教你怎样才能做到这一点,另外也展示了Pad的有效性.主要内容包括: 如何针对部分的pipeline建立一个新的线程 什么是Pad的有效性 如何复制流 介绍 多线程 GStreamer是一个支持多线程的框架.这就说明,如果有必要它会在内部自动创建/销毁线程.比如:在应用线程中把流解出来.而且,plugin在自身也可以任意的创建线程,比如一个视频解码器为了充分利用4核CPU的能力,可以创建4个线程. 这里…
Java基础教程:多线程基础——线程池 线程池 在正常负载的情况瞎,通过为每一个请求创建一个新的线程来提供服务,从而实现更高的响应性. new Thread(runnable).start() 在生产环境中,为每一个任务分配一个线程的方法存在一些缺陷,尤其是需要创建大量线程时: 线程生命周期的开销非常高.线程的创建和销毁是需要代价的. 资源消耗.如果可运行线程数量多于可用处理器数量,那么有些线程将会闲置.大量空闲的线程将会占用许多内存,给垃圾回收器带来压力,而且大量线程在竞争CPU资源时还将产生…
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操作系统,内核为Linux. 作为开发人员,我们所关心的是这个平台的架构以及所支持的开发语言.以下是这个平台的架构模型:     这个平台有下面功能:   + Application framework: 可重用的和可替换的组件部分,在这个层面上,全部的软件都是平等的. + Dalvik virtul…
Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. */ @Override public void run() { super.run(); } } [说明] 由于Java继承机制,此处不再支持多继承. 2.实现Runnable接口 class myRunable implements Runnable { /** * 实现Runnable接口,…
Java基础教程:多线程基础(4)——Lock的使用 快速开始 Java 5中Lock对象的也能实现同步的效果,而且在使用上更加方便. 本节重点的2个知识点是:ReentrantLock类的使用和ReentrantReadWriteLock类的使用. 使用ReentrantLock类 在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥. 但在Java1.5中新增的ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定.多路分支通…
Java基础教程:多线程基础(2)——线程间的通信 使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督. 线程间的通信 思维导图 等待/通知机制 不使用等待/通知机制 我们可以使用使用sleep()与 whle(true) 死循环来实现多个线程间的通信. 虽然两个线程实现了通信,但是线程B必须不断的通过while语句轮训机制来检测某一个条件,这样会浪费CPU资源. 如果轮询间隔较小,更浪费时间间隔.如果轮训时间间隔…
Java基础教程:多线程杂谈——双重检查锁与Volatile 双重检查锁 有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化.此时程序员可能会采用延迟初始化.但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题.比如,下面是非线程安全的延迟初始化对象的示例代码: public class A{ private Instance instance; public Instance getInstance(){ if(instance==null){ in…
Java基础教程:多线程基础(6)——信号量(Semaphore) 信号量 信号量(Semaphore)由一个值和一个指针组成,指针指向等待该信号量的进程.信号量的值表示相应资源的使用情况.信号量S≥0时,S表示可用资源的数量. 信号量可以被两个操作修改: 执行一次P操作意味着请求分配一个资源,因此S的值减1:当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数.请求者必须等待其他进程释放该类资源,才能继续运行. 执行一次V操作意味着释放一个资源,因此S的值加1:若S<0,表…
Java基础教程:多线程基础(5)——倒计时器(CountDownLatch) 引入倒计时器 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行.当然,使用线程间消息通信机制也可以完成.其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的这种业务场景. 为了能够理解CountDownLa…
目标       Pad的Capabilities是一个GStreamer element的基础,因为framework大部分时间是自动处理的,所以我们几乎感觉不到它的存在.本教程比较偏向原理,介绍了:       什么是Pad Capabilities       如何获得这个东西       什么时候应该去获得这个东西       为什么你需要了解他们 介绍 Pads       Pads允许信息进入或者离开一个element--就像曾经展示过得一样.这个Capabilities(或者简单地…