小编Nip*_*dar的帖子

Java中golang通道的等价物

我有一个要求,我需要从一组阻塞队列中读取.阻塞队列由我正在使用的库创建.我的代码必须从队列中读取.我不想为每个阻塞队列创建一个读者线程.相反,我想使用单个线程(或者可能最多使用2/3线程)轮询它们的数据可用性.由于某些阻塞队列可能长时间没有数据,而其中一些阻塞队列可能会获得数据突发.轮询具有较小超时的队列将起作用,但这根本不高效,因为它仍然需要在所有队列上保持循环,即使其中一些队列长时间没有数据.基本上,我正在寻找一个选择/ epoll(用于套接字)类型的阻塞队列机制.任何线索都非常感谢.

尽管如此,在Go中执行此操作非常简单.下面的代码模拟了与channel和goroutines相同的内容:

package main

import "fmt"
import "time"
import "math/rand"

func sendMessage(sc chan string) {
    var i int

    for {
        i =  rand.Intn(10)
        for ; i >= 0 ; i-- {
            sc <- fmt.Sprintf("Order number %d",rand.Intn(100))
        }
        i = 1000 + rand.Intn(32000);
        time.Sleep(time.Duration(i) * time.Millisecond)
    }
}

func sendNum(c chan int) {
    var i int 
    for  {
        i = rand.Intn(16);
        for ; i >=  0; i-- {
            time.Sleep(20 * time.Millisecond)
            c <- rand.Intn(65534)
        }
        i = 1000 + rand.Intn(24000); …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading go blockingqueue

16
推荐指数
2
解决办法
5605
查看次数

如何配置Logback以将主机名/ IP添加到每个日志事件?

我正在使用Logback进行日志记录.Scribe appender将日志实时发送到中央Scribe聚合器.但我不知道如何在日志中为每个日志事件添加源机器IP.查看聚合的中央Scribe日志,几乎不可能知道哪台计算机正在发送日志.因此,将源计算机的IP附加到每个日志事件将会很有帮助,如果我们可以通过logback配置来控制它,那将非常好.

logback

12
推荐指数
3
解决办法
1万
查看次数

docker 容器如何解析同一台机器上运行的其他 docker 容器的主机名?

我开始使用 docker 并喜欢它主要是因为 Docker 容器是一种轻量级虚拟机。但我无法弄清楚,docker 容器如何解析彼此的主机名。他们可以使用 IP 地址相互连接,但不能使用主机名,我什至无法编辑容器中的 /etc/hosts 来弥补这一点。当我重新启动容器时,它们会获得不同的 IP,因此我想使用主机名代替 IP 来相互通信。假设我想在容器中运行 Zookeeper 集群的 Zookeeper 实例,并且想将 Zookeeper 服务器的主机名放入配置 (zoo.cfg) 文件中。

docker dockerhub

9
推荐指数
2
解决办法
2万
查看次数

与许多goroutines一起消耗内存

我试图检查Go将如何使用100,000 goroutines.我写了一个简单的程序来产生许多例程,除了打印一些公告之外什么都不做.我将MaxStack大小限制为仅512字节.但我注意到程序大小并没有减少.它消耗了大约460 MB的内存,因此每个goroutine大约4 KB.我的问题是,我们可以设置最大堆栈大小低于goroutines的"最小"堆栈大小(可能是4 KB).我们如何设置Goroutine开始的最小堆栈大小?以下是我用于测试的示例代码:

package main

import "fmt"
import "time"

import "runtime/debug"

func main() {
    fmt.Printf("%v\n", debug.SetMaxStack(512))
    var i int
    for i = 0; i < 100000; i++ {
        go func(x int) {
            for {
                time.Sleep(10 * time.Millisecond)
                //fmt.Printf("I am %v\n", x)
            }
        }(i)
    }
    fmt.Println("Done")
    time.Sleep(999999999999)
}
Run Code Online (Sandbox Code Playgroud)

go concurrent-programming

7
推荐指数
3
解决办法
4021
查看次数

MongoDB 变更流通知仅发送给一位消费者

我们如何确保只有一个进程会收到某些 Mongo 集合更改通知?我们运行几个进程来继续侦听某些集合中的更改。但他们所有人都会收到所有更改通知。我们可以使用一些外部锁来解决这个问题,即无论哪个进程获得锁,都只会订阅更改通知,如果锁所有者进程死亡/释放锁,那么其他进程可能会获得锁并开始监听更改通知。

但是有什么方法可以从 Mongo 驱动程序本身实现这一点吗?我正在寻找像 Kafka 消费者组这样的东西,可以保证在消费者组中,只有一个消费者从分区获取事件。

mongodb mongodb-query

7
推荐指数
0
解决办法
219
查看次数

如何为聚合获取前n个桶,将所有其他桶合并到"其他"桶中?

假设一个集合,其架构如下所示:

{
    "customer" : <unique-id-for-customer>,
    "purchase" : <number>,
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望获得前五名客户(按购买排名),第六名是"其他",它结合了其他客户的所有购买数量.

基本上,聚合的输出应该是:

{ "_id" : "customer100", "purchasequantity" : 4000000 }
{ "_id" : "customer5", "purchasequantity" : 81800 }
{ "_id" : "customer4", "purchasequantity" : 40900 }
{ "_id" : "customer3", "purchasequantity" : 440 }
{ "_id" : "customer1", "purchasequantity" : 300 }
{"_id" : "others", "purchasequantity" : 29999}
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo mongodb-query aggregation-framework

6
推荐指数
1
解决办法
528
查看次数

我们如何为Prometheus指标添加额外的标签?

假设我们要收集一个月的相同指标,现在我们想修改这些指标以使其具有额外的标签(在旧数据中也是如此),我们该如何做。现有指标:

mongodb_exporter_last_scrape_duration_seconds{instance="127.0.0.1:9216",job="mongo"}
Run Code Online (Sandbox Code Playgroud)

想要将其更改为:

mongodb_exporter_last_scrape_duration_seconds{cluster="stage", instance="127.0.0.1:9216",job="mongo"}   
Run Code Online (Sandbox Code Playgroud)

prometheus prometheus-operator

5
推荐指数
3
解决办法
8209
查看次数

为什么jstack无法获得Java进程的线程?

我对JSTACK无法获得进程的线程转储很无能为力.它是重新调整错误"java.lang.RuntimeException:无法从地址中推断出线程的类型......"

我试过下面的命令:

$ sudo bin/jstack   42846
$ sudo bin/jstack -F 42846
Run Code Online (Sandbox Code Playgroud)

任何线索都会对我有所帮助.以下是我遇到的错误:

 Attaching to process ID 42846, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.131-b11
    Deadlock Detection:

    java.lang.RuntimeException: Unable to deduce type of thread from address 0x00007fb1f430f000 (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, or SurrogateLockerThread)
        at sun.jvm.hotspot.runtime.Threads.createJavaThreadWrapper(Threads.java:166)
        at sun.jvm.hotspot.runtime.Threads.first(Threads.java:150)
        at sun.jvm.hotspot.runtime.DeadlockDetector.createThreadTable(DeadlockDetector.java:149)
        at sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:56)
        at sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:39)
        at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:62)
        at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45)
        at sun.jvm.hotspot.tools.JStack.run(JStack.java:66)
        at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
        at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
        at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) …
Run Code Online (Sandbox Code Playgroud)

java java-8

5
推荐指数
1
解决办法
2232
查看次数

Clojure 1.5.1中缺少defnk

我正在学习Clojure并使用Clojure 1.5.1.似乎Clojure 1.5.1不再具有defnk宏.那么,在Clojure 1.5.1中,defnk的等价物是什么?

clojure

4
推荐指数
1
解决办法
379
查看次数

骗子的怪异行为

我正在尝试一些Clojure,但现在对"conj"的行为感到困惑.见下面的exaples:

user=> (conj [1 2 3] 4)
[1 2 3 4]
Run Code Online (Sandbox Code Playgroud)

以上是预期的.但现在,如果我这样做:

user=> (conj (reverse [1 2 3]) 4)
(4 3 2 1)
Run Code Online (Sandbox Code Playgroud)

它返回(4 3 2 1).但我想它本应该回来了(3 2 1 4).那么,我在这里错过了什么?

clojure

3
推荐指数
1
解决办法
88
查看次数

我应该为数据库使用 EBS 还是 EFS?

对于具有高可用性的 MongoDB、Cassandra 或 Elasticsearch 集群的数据库目录,我应该使用 EBS 还是 EFS?如果 MongoDB、Cassnadra 和 Elasticsearch 集群配置为复制因子 > 1,它们会负责跨节点复制数据,因此我猜可能不需要 EFS 复制功能。

amazon-ec2 amazon-ebs mongodb amazon-web-services amazon-efs

2
推荐指数
2
解决办法
2998
查看次数

我们如何在prometheus数据存储中获得高可用性?

我是prometheus的新手,所以我不确定高可用性是否是Prometheus数据存储tsdb的一部分.我没有考虑让两个prometheus服务器实例从同一个导出器中抓取数据,因为它很可能有两个不同步的tsdb数据存储.

high-availability prometheus

1
推荐指数
1
解决办法
1723
查看次数

在Cassandra可以更新到位吗?

我在Cassandra有一个表,我用1000个条目填充一些行(每行有10000+列).行中的条目经常更新,基本上只是一个字段(它是一个整数)用不同的值更新.列的所有其他值保持不变.我的问题是,更新是否会就地完成?Cassandra频繁更新参赛作品有多好?

cassandra nosql cassandra-cli cassandra-2.0

0
推荐指数
1
解决办法
2174
查看次数