- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
假设我有以下代码来读取行并将每行乘以 2,然后逐行打印出每一行。
我想使用 N 个 worker 。每个 worker 每次取 M 行并处理它们。更重要的是,我希望输出的打印顺序与输入的顺序相同。但是这里的示例并不能保证输出的打印顺序与输入的顺序相同。
https://gobyexample.com/worker-pools
以下 URL 还显示了一些示例。但我认为它们不符合我的要求。问题是输入可以任意长。在打印之前无法将所有内容保存在内存中。必须有一种方法可以从 worker 那里获得一些输出,可以确定 worker 的输出是否准备好打印然后打印。听起来应该有一个 master goroutine 来做这件事。但我不确定如何最有效地实现它,因为当 N 很大时,这个 master gorountine 很容易成为瓶颈。
How to collect values from N goroutines executed in a specific order?
谁能展示一个示例程序,该程序由 worker 按顺序生成并在可以打印时尽早打印结果?
$ cat main.go
#!/usr/bin/env gorun
// vim: set noexpandtab tabstop=2:
package main
import (
"bufio"
"fmt"
"strconv"
"io"
"os"
"log"
)
func main() {
stdin := bufio.NewReader(os.Stdin)
for {
line, err := stdin.ReadString('\n')
if err == io.EOF {
if len(line) != 0 {
i, _ := strconv.Atoi(line)
fmt.Println(i*2)
}
break
} else if err != nil {
log.Fatal(err)
}
i, _ := strconv.Atoi(line[:(len(line)-1)])
fmt.Println(i*2)
}
}
最佳答案
如果 worker 知道他们的初始订单,例如例如,了解行号,然后让工作人员保留该信息(仅行号)。然后,您的员工将该信息反馈给您的结果 channel 。您的结果聚合代码从结果 channel 接收,然后在进一步处理(例如打印)之前根据初始订购信息对结果进行排序。
下面是您展示的其中一个示例的快速修改。
包主
import "fmt"
import "time"
type Result struct {
Data, Seq int
}
type Job struct {
Data string
Seq int
}
func worker(id int, jobs <-chan Job, results chan<- Result) {
for j := range jobs {
fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j)
results <- Result{len(j.Data), j.Seq}
}
}
func main() {
workload := 5
jobs := make(chan Job, 100)
results := make(chan Result, 100)
output := make([]Result, workload)
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
for j := 0; j < workload; j++ {
jobs <- Job{ // explicit to make it clear
Data: fmt.Sprintf("blah blah blah %d", j),
Seq: j,
}
}
close(jobs)
// receive results
for a := 1; a <= workload; a++ {
res := <-results
output[res.Seq] = res
// uncomment to see unordered
// fmt.Printf("received: %#v", res)
}
for _, out := range output {
fmt.Printf("output %#v\n", out)
}
}
顺便说一句:如果您事先不知道您的工作量,这将无法正常工作...在这种情况下,您接收结果的代码在处理已经收到和订购的部分时需要更智能一些(作业):) .基本上等待第 0 行,然后等待下一个或打印已按顺序接收到的内容。
玩得开心!
关于go - 如何从 worker 那里订购结果,就好像没有使用 worker 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48635071/
我正在尝试以一种可以根据需要循环输出和输出 header 的方式编写 SQL Server 2008 查询。我已经多次以错误的方式完成这些工作,让 ColdFusion 在页面中完成艰苦的工作,但需要
为什么通用寄存器按原样排序(eax、ecx、edx、ebx)?例如,对于“inc”指令,操作码是: inc eax - 40 inc ecx - 41 inc edx - 42 inc ebx - 4
晚上好。 我需要组织一个HashMap,它是这样的: private HashMap>taskOrdered = new HashMap>(); 每个“任务”都是一个具有 3 个属性的类: 人员姓名;
这个问题在这里已经有了答案: C# - sorting by a property (3 个答案) how to sort a collection by datetime in c# (4 个答案
我有以下存储记录和错误的 XML 文档(如果需要可以重新设计)。 11/03/2010 14:12:41 1 11/03/2
关于这个主题有很多问题,仍然无法找到解决这个问题的方法。 我正在做的查询是: SELECT `b`.`ads_id` AS `ads_id`, `b`.`bod_bedrag`
我正在制作一个排名系统。但我想要的是将我得到的结果 ($kn) 从最高到最低排序。我该怎么做? include "includes/core.inc.php"; require "includes/c
我有一个这样的列表, M=[[75], [95, 64], [17, 47, 82], [18, 35, 87, 10], [20, 4, 82, 47, 65], [19, 1, 23, 75, 3
我有 5 个数学问题要解决,30 个人将尝试解决这些问题中的每一个。 我知道每个人解决某个问题的速度有多快: Person1 将能够在 5 秒内解决问题 A,在 7 秒内解决问题 B,在 20 秒内解
考虑 val animals = List("penguin","ferret","cat").toSeq val rdd = sc.makeRDD(animals, 1) 我想订购这个 RDD。我是
我有以下列表: 我的 list [[1]] [1] 11 [[2]] [1] 9 [[3]] [1] 10 我想对它进行排序。我试过了 sort(mylist) Error: mylist must
sort(v; alg::Algorithm=defalg(v), lt=isless, by=identity, rev::Bool=false, order::Ordering=Forward)
我有一个数据框,我想生成一个 geom_tile()从中绘制,但我希望图形的排序不是基于字母顺序而是基于此数据框中的变量。 structure(list(V1 = c("a", "y", "w", "
我列出 Facebook 好友是这样的: FB.api('/me/friends?fields=id,name,updated_time&date_format=U&',
我正在多个线程中的UDP上接收消息。每次接待后,我都会提出MessageReceived.OnNext(message)。 因为我使用多个线程,所以消息无序引发,这是一个问题。 如何通过消息计数器命令
我与两个实体有一对多关系: Order: int OrderId string OrderNumber ... OrderItem: int ItemId int sequence decimal Q
我正在尝试从用户将输入的数字(代码)中对结构进行排序,并且我正在使用冒泡排序。我希望程序打印按数字(代码)排序的所有数据,但它只对数字(代码)进行排序。有人可以帮我对数字(代码)中的其他元素进行排序吗
对于我的通用网格,我目前这样做是为了激活排序: Elements.OrderBy(column.SortExpression).AsQueryable(); 其中SortExpression类型为 F
给定两个 DOM 元素,比如 a 和 b,我们如何确定哪个在文档中排在第一位? 我正在对一组元素实现拖放操作。并且可以以任意顺序选择元素,但是在拖动它们时,需要以“正确”的顺序移动这些元素。 最佳答案
我正在将我们的管理系统从 PHP 迁移到 Ruby On Rails。旧系统的一部分使用 SQL 来构建客户列表,然后按最后一次联系的时间对他们进行排序: SELECT `cust
我是一名优秀的程序员,十分优秀!