标签: fifo

固定大小队列,在新的enques上自动将旧值出列

我正在使用ConcurrentQueue共享数据结构,其目的是保存传递给它的最后N个对象(历史记录类型).

假设我们有一个浏览器,我们希望最后100个浏览Urls.我想要一个队列,当容量变满时(历史中的100个地址),当新条目插入(入队)时自动删除(出列)最旧的(第一个)条目.

我怎样才能实现这个目标System.Collections

c# queue fifo

111
推荐指数
7
解决办法
7万
查看次数

我应该将哪个STL容器用于FIFO?

哪个STL容器最适合我的需求?我基本上有一个10个元素的宽容器,在这个容器中我不断使用push_back新元素pop_front(大约一百万次).

我目前正在使用a std::deque来执行任务,但是想知道是否std::list会更高效,因为我不需要重新分配自己(或者我可能会误认为std::dequestd::vector?).或者是否有更高效的容器满足我的需求?

PS我不需要随机访问

c++ stl fifo

84
推荐指数
5
解决办法
8万
查看次数

Java中的FIFO类

我想通过Java中的类实现FIFO.

这样的课程已经存在吗?如果没有,我该如何实现自己的?

注意

我在这里找到了一个类http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html,但它不包含dmg.util.*.我不知道这样的包装是否存在.

java fifo

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

为什么只读打开命名管道块?

在使用Python在各种UNIX(Linux,FreeBSD和MacOS X)下处理命名管道(FIFO)时,我注意到了一些奇怪的事情.第一个,也许是最烦人的是尝试打开空闲/空闲FIFO只读将被阻止(除非我使用os.O_NONBLOCK较低级别的os.open()调用).但是,如果我打开它进行读/写,那么我就不会阻塞.

例子:

f = open('./myfifo', 'r')               # Blocks unless data is already in the pipe
f = os.open('./myfifo', os.O_RDONLY)    # ditto

# Contrast to:
f = open('./myfifo', 'w+')                           # does NOT block
f = os.open('./myfifo', os.O_RDWR)                   # ditto
f = os.open('./myfifo', os.O_RDONLY|os.O_NONBLOCK)   # ditto
Run Code Online (Sandbox Code Playgroud)

我只是好奇为什么.为什么打开调用块而不是后续的一些读操作?

另外我注意到非阻塞文件描述符可以表现为Python中的不同行为.在我使用的情况下os.open()os.O_NONBLOCK初始开启操作那么os.read()似乎如果数据还没有准备好文件描述符返回一个空字符串.但是,如果我使用fcntl.fcnt(f.fileno(), fcntl.F_SETFL, fcntl.GETFL | os.O_NONBLOCK)然后os.read引发异常(errno.EWOULDBLOCK)

是否有一些其他标志open()由我的os.open()例子未设置的法线设置?它们有什么不同,为什么?

file-io posix nonblocking named-pipes fifo

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

有队列实现吗?

任何人都可以提出转到容器,简单快速的FIF /队列,Go有3个不同的容器:heap,listvector.哪一个更适合实现队列?

queue fifo go

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

当我们需要存储"最后n个项目"时,列表是否比矢量更好?

有很多问题表明应该总是使用向量,但在我看来,列表对于场景更好,我们需要存储"最后n个项目"

例如,假设我们需要存储最后看到的5个项目:迭代0:

3,24,51,62,37,
Run Code Online (Sandbox Code Playgroud)

然后在每次迭代时,删除索引0处的项目,并在末尾添加新项目:

迭代1:

24,51,62,37,8
Run Code Online (Sandbox Code Playgroud)

迭代2:

51,62,37,8,12
Run Code Online (Sandbox Code Playgroud)

似乎对于这个用例,对于向量,复杂度将是O(n),因为我们必须复制n个项目,但是在列表中,它应该是O(1),因为我们总是只是砍掉了头部,并在每次迭代时添加到尾部.

我的理解是否正确?这是std :: list的实际行为吗?

c++ buffering fifo data-stream c++11

43
推荐指数
4
解决办法
4899
查看次数

如何在C#.NET中使用"FIFO"?

.NET中是否有标准集合实现FIFO堆栈?

.net c# fifo

36
推荐指数
3
解决办法
6万
查看次数

在Unix上命名管道(FIFO)与多个读者

我有两个程序,Writer和Reader.

我有一个从Writer到Reader的FIFO,所以当我在Writer中写入stdin的东西时,它会从Reader打印到stdout.

我尝试打开两个读者,并且只从两个Reader程序中的一个输出到stdout.每次运行时,Unix选择打印标准输出的读者程序似乎是任意的,但是一旦选择了其中一个程序,每个输出到标准输出都会从同一个Reader程序打印出来.

有谁知道为什么会这样?

如果我有两个WRITER程序,它们都可以写入同一个管道.

unix fifo

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

Linux非阻塞fifo(按需记录)

我喜欢按需"记录"节目输出.例如.输出记录到终端,但另一个进程可以随时挂接当前输出.

经典的方式是:

myprogram 2>&1 | tee /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

并按需提供

tail /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

但是,这将创建一个不断增长的日志文件,即使在驱动器空间不足之前不使用它也是如此.所以我的尝试是:

mkfifo /tmp/mylog
myprogram 2>&1 | tee /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

并按需提供

cat /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

现在我可以随时阅读/ tmp/mylog.但是,任何输出都会阻塞程序,直到读取/ tmp/mylog.我喜欢fifo来刷新任何未读回的数据.怎么做?

linux bash logging fifo

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

使用GCD的FIFO串行队列

我正在尝试为我工作的公司创建一个(网络)同步数组.虽然网络部分工作正常,但我已经陷入了一个问题.

我希望创建一个新队列使用dispatch_create_queue,我将添加两个不在主线程上运行的块,但是以串行方式运行,这意味着首先必须运行第一个块,然后是第二个块,而不是平行.

我已经阅读了苹果文档,但至少可以说是令人困惑的.

  • 当我使用创建队列dispatch_queue_create然后使用时添加块(在它们被定义之后)dispatch_sync,我发现该块仍然在主线程上执行.

  • 使用时dispatch_async,即当主线程上没有执行块时.

  • 当我尝试使用dispatch_sync它们添加两个块时永远被阻止.

  • 两个块似乎运行良好并且离开主线程的唯一时间是在调用时dispatch_async.

然而,我之所以选择GCD和同步方法,是因为我的印象是我正在创建一个新队列(因此​​是一个新线程),并且向该队列添加块只会阻塞一个,直到另一个完成执行.是不是这种情况,或者创建队列不保证代码不会在主线程上运行?

objective-c fifo grand-central-dispatch objective-c-blocks

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