草庐IT

postgresql - 建议的 Golang 架构,用于频繁轮询用户帐户

我正在创建一个小型服务,我经常(每5秒左右)轮询大约100个帐户(在类似Twitter的服务中)以检查新消息,因为该服务尚未提供流式API(就像Twitter实际上所做的那样)。在我的脑海中,我将架构计划为每5秒为每个用户排队一次Ticker。勾号触发后,我对该服务进行API调用,检查他们的消息,然后调用SELECT到我的Postgres数据库以获取特定用户详细信息并检查最新消息的日期,如果有是比UPDATE条目更新的消息并通知用户。重复广告恶心。我在后端事物和架构方面不是很有经验,所以我想确保这不是一个绝对荒谬的设置。对数据库的调用量是否合理?我在滥用goroutines吗?

go - 在 go 中轮询函数直到 ok != true 的惯用方式

我有一个函数,它在轮询时返回值,但在某些时候将停止返回合理的值,如下所示。有没有比每次检查if!ok更惯用的方式来轮询它。我在想类似于使用range轮询channel的事情。packagemainimport"fmt"funciter()func()(int,bool){i:=0returnfunc()(int,bool){ifi 最佳答案 我认为没有办法避免检查ok,但您可以重组它以避免丑陋的中断:forv,ok:=f();ok;v,ok=f(){fmt.Println(v)}请注意,这仅适用于以下任一情况:您有一个具有多个返回值

go - 将 Google PubSub 与 Golang 结合使用。轮询服务的最有效(成本)方式

我们正在从AMQP迁移到Google的Pubsub。Thedocssuggest拉动可能是我们的最佳选择,因为我们正在使用计算引擎并且无法打开我们的工作人员通过推送服务接收。它还说pull可能会产生额外的费用,具体取决于使用情况:Ifpollingisused,highnetworkusagemaybeincurredifyouareopeningconnectionsfrequentlyandclosingthemimmediately.我们在go中创建了一个在循环中运行的测试订阅者:funcmain(){jsonKey,err:=ioutil.ReadFile("pubsub-ke

go - Go中的计划轮询任务

我写了一些代码,每30分钟会同时轮询URL:func(obj*MyObj)Poll(){for;;{for_,url:=rangeobj.UrlList{//DownloadthecurrentcontentsoftheURLanddosomethingwithit}time.Sleep(30*time.Minute)}//Starttheroutineinanotherfunctiongoobj.Poll()然后我如何在代码的其他地方添加到obj.UrlList并确保下次轮询URL时Pollgoroutine中的UrlList也已更新,因此也将轮询新的URL?我知道在Go中内存是通过

c - 为什么消息队列没有类似轮询/选择的机制?

就像我们可以做的那样,在fd上进行poll/epoll/select,我们不能在msgqueueid上。我发现了一些非标准的方法来使msgqueue-id成为fd,但毕竟它是非标准的。所以我的问题是,为什么linuxgeeks没有在msgqueueid上实现poll/select?这会导致严重的问题吗?我需要实现这种机制。我该怎么做? 最佳答案 来自mq_overview手册页:PollingmessagequeuedescriptorsOnLinux,amessagequeuedescriptorisactuallyafilede

Linux 外部事件处理 - IRQ 与轮询 kthread

我正在将设备驱动程序从QNX移植到Linux。在QNX中,旧驱动程序使用带有无限循环的pthread来监视中断的发生,而不是注册真正的中断处理程序。为了尝试证明使用register_irq()而不是专用轮询线程的功效,我在Linux中编写了两个驱动程序。每个的相关代码如下所示,问题在底部。中断请求编写处理程序irqreturn_ttiming_interrupt_handler(intirq,void*dev_id){u32test;/*readdeviceinterruptcommand/statusregister*/test=ioread32(timing_card[3].bas

c - 在 Linux 中通过 SIOCGIFCONF 轮询接口(interface)名称

我正在尝试轮询网络设备名称。我从各种片段中拼凑而成,http://unixhelp.ed.ac.uk/CGI/man-cgi?netdevice+7http://lists.apple.com/archives/Unix-porting/2002/Apr/msg00134.htmlhttp://ubuntuforums.org/showthread.php?t=1421487但我的输出只是乱码。#include#include#include#include#include#include#defineBUFLEN1024#defineSEQ9999intmain(intargc,co

linux - 关闭正在轮询的文件描述符

如果我有两个线程(Linux、NPTL),并且我有一个线程正在轮询一个或多个文件描述符,而另一个正在关闭其中一个,这是一个合理的操作吗?我是否正在做一些我不应该在MT环境中做的事情?我考虑这样做的主要原因是,我不一定要与轮询线程通信、中断它等,而是出于任何原因我只想关闭描述符,并且当轮询线程醒来后,我希望revents包含POLLNVAL,这表明文件描述符应该在下一次轮询之前被线程丢弃。我整理了一个简单的测试,它确实表明POLLNVAL正是将要发生的事情。但是,在那种情况下,POLLNVAL仅在超时到期时设置,关闭套接字似乎不会使poll()返回。如果是这种情况,我可以终止线程以使po

linux - udev monitor 在没有轮询的情况下很慢

我按照建议尝试了udev(udevadmmonitor)。VGA插头在大约10分钟后报告。两秒钟。如果我对其进行轮询,几乎会立即报告更改。这里发生了什么? 最佳答案 如果轮询是恒定的,则会浪费很多CPU时间,并且事件计时会在日志输出中出现偏差。当您手动轮询时,它会立即发生,没有超时。 关于linux-udevmonitor在没有轮询的情况下很慢,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

linux - Linux 中的异步套接字——轮询与回调

在决定在我的简单服务器(linux)中实现异步套接字时,我遇到了一个问题。我打算不断地轮询(),并在调用之间做一些清理和缓存。现在这看起来很浪费,所以我做了更多的挖掘并找到了一种可能在i/o上实现一些回调的方法。如果我使用O_NONBLOCK创建一个套接字,使用SIOCSPGRPioctl()在i/o上发送一个SIGIO,并使用sigaction()定义一个回调函数我/我。另外,是否可以为不同的套接字定义不同的功能? 最佳答案 “我打算不断地轮询(),并在调用之间做一些清理和缓存。现在这看起来很浪费”如何浪费?您真的尝试并实现了这个