public class Msg {
public double i;
public double j;
public String orgStr = null;
}
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; /**
* A = B + C
* j = i + j
*/
public class Plus implements Runnable {
public static BlockingQueue<Msg> queue = new LinkedBlockingQueue<>(); @Override
public void run() {
while (true){
try {
Msg msg = queue.take();
msg.j=msg.i+msg.j;
Multiply.queue.add(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; /**
* D = A * B
* i = i * (i+j)
*/
public class Multiply implements Runnable{
public static BlockingQueue<Msg> queue = new LinkedBlockingQueue<>(); @Override
public void run() {
while (true){
try {
Msg msg = queue.take();
msg.i=msg.i*msg.j;
Div.queue.add(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; /**
* D = D / 2
* i = i * (i+j)/2
*/
public class Div implements Runnable {
public static BlockingQueue<Msg> queue = new LinkedBlockingQueue<>();
@Override
public void run() {
while (true){
try {
Msg msg = queue.take();
msg.i=msg.i/2;
System.out.println(msg.orgStr+"="+msg.i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

/**
* 并行流水线
* 求 (B+C)*B/2
* Plus:A = B + C
* Multiply:D = A * B
* Div:D = D / 2
*
* i = i * (i+j)/2
*/
public class PStreamMain {
public static void main(String[] args){
new Thread(new Plus()).start();
new Thread(new Multiply()).start();
new Thread(new Div()).start();
for (int B = 1; B < 1000; B++) {
for (int C = 1; C < 1000; C++) {
Msg msg = new Msg();
msg.i = B;
msg.j = C;
msg.orgStr = "(("+B+"+"+C+")*"+B+")/2";
Plus.queue.add(msg);
}
}
}
//((1+1)*1)/2=1.0
//((1+2)*1)/2=1.5
//((1+3)*1)/2=2.0
//((1+4)*1)/2=2.5
//((1+5)*1)/2=3.0
//((1+6)*1)/2=3.5
//((1+7)*1)/2=4.0
//((1+8)*1)/2=4.5
//((1+9)*1)/2=5.0
//((1+10)*1)/2=5.5
//((1+11)*1)/2=6.0
//((1+12)*1)/2=6.5
//...
}

并行流水线--求 (B+C)*B/2的更多相关文章

  1. [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区

    [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 目录 [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 0x00 摘要 0x01 前言 1.1 P ...

  2. 计算机体系结构——流水线技术(Pipelining)

    本文导读: 一.并行技术 .并行技术分类 .新技术的设计与实现 .指令周期 二.流水线技术 .什么是流水线 .指令重叠方式 .流水工作设计 .流水线的描述方法(时空图) .流水线特点 三.流水线的分类 ...

  3. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

  4. Parallel Programming-实现并行操作的流水线(生产者、消费者)

    本文介绍如何使用C#实现并行执行的流水线(生产者消费者): 1.流水线示意图 2.实现并行流水线 一.流水线示意图 上图演示了流水线,action1接收input,然后产生结果保存在buffer1中, ...

  5. 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)

    试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表, ...

  6. [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush

    [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 目录 [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 0x0 ...

  7. 基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone

    1. 介绍 Drone by Harness 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试.构建.发布.每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构 ...

  8. 基于FPGA的Sobel边缘检测的实现

    前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Can ...

  9. 生产者消费者模式-Java实现

    感知阶段 随着软件业的发展,互联网用户的日渐增多,并发这门艺术的兴起似乎是那么合情合理.每日PV十多亿的淘宝,处理并发的手段可谓是业界一流.用户访问淘宝首页的平均等待时间只有区区几秒,但是服务器所处理 ...

随机推荐

  1. 《数据结构与算法(C语言版)》严蔚敏 | 第四章课本案例

    //二叉树的顺序存储表示 #define MAXTSIZE 100 typedef TElemtype SqBiTree[MAXTSIZE]; SqBiTree bt; //二叉树的二叉链表存储表示 ...

  2. SQL SERVER 2012文件表(FILETABLE)新体验之一

    SQLSERVER 2012 文件表功能很COOL,让我们体验一下吧. 1,创建数据库 [sql] DREATE DATABASE FileTableTest ON  PRIMARY (     NA ...

  3. p5414 [YNOI2019]排序

    分析 这是真正的云南oi/px 我们需要考虑保留一段不降子序列 剩余的自由往前往后移动 所以dp一下即可 代码 #include<bits/stdc++.h> using namespac ...

  4. 【The type javax.servlet.http.HttpServletRequest cannot be resolved】解决方案

    是缺少serverlet的引用库,解决如下 1.工程右键-properties->java build path 2.在java build path的libraries tab页中选择Add ...

  5. Web安全测试——常见的威胁攻防

    SQL注入 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL In ...

  6. 学习:多项式算法----FWT

    FWT也称快速沃尔什变换,是用来求多项式之间位运算的系数的.FWT的思想与FFT有异曲同工之妙,但较FFT来说,FWT比较简单. 前言 之前学习FFT(快速傅里叶变换)的时候,我们知道FFT是用来快速 ...

  7. JAVA泛型知识(二)--> <? extends T>和<? super T>

    <? extends T> 和 <? super T> 是Java泛型中的“通配符(Wildcards)” 和 “边界(Bounds)”的概念 <? extends T& ...

  8. react 渲染顺序

    工作中要对一个表格做再次更新, 可能是渲染后更新或者部分组件渲染之后, 对页面效果做处理 之前对react的理解, 仅仅停留在render渲染. 这次好好理解了下react的生命周期 1 react组 ...

  9. confd + Nacos | 无代码侵入的配置变更管理

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 来文来自阿里中间件投稿 作者:风卿,Nacos Committer,阿里巴巴开发工程师 为什么要支持confd,老的应用配置 ...

  10. 数据溢出-varchar类型

    数据溢出一.varchar(65535)1.在charset=latin1,因为有额外的开销,实际只能存65532 CREATE table demo( a ) )charset=latin1 eng ...