问题标签 [buffering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
64638 浏览

python - Python套接字缓冲

假设我想使用标准socket模块从套接字读取一行:

究竟发生了s.recv(1)什么?每次都会发出系统调用吗?无论如何,我想我应该添加一些缓冲:

为了与硬件和网络现实进行最佳匹配,bufsize的值应该是 2 的相对较小的幂,例如 4096。

http://docs.python.org/library/socket.html#socket.socket.recv

但是编写高效且线程安全的缓冲似乎并不容易。如果我使用file.readline()怎么办?

0 投票
6 回答
135 浏览

c - 检查通过程序的 C 管道——边界情况

我从套接字 A 接收并即时将其写入套接字 B(就像代理服务器可能一样)。我想检查并可能修改通过的数据。我的问题是如何处理边界情况,即我正在搜索的正则表达式将在两个连续的套接字 A 读取和套接字 B 写入迭代之间匹配。

0 投票
3 回答
487 浏览

cgi - 是否可以获得无缓冲的网络浏览器输出?

我有一个小的 cgi 脚本,用于获取和验证 Nagios 的配置文件。典型的运行时间是几分钟,我想在运行期间在浏览器中获得一些反馈。

为了说明我想要发生的事情,请考虑一下:

当我通过 telnet 或 wget 在此脚本上执行 GET 时,输出一次一行,间隔十秒(“A”...“B”...“C”...等等) .

当我尝试在普通浏览器中打开它时,浏览器似乎将其全部缓冲并在脚本完成时显示输出(50 秒的静默......“ABCDE”)。

是否可以让浏览器在数据到达后立即将其呈现给用户?

0 投票
7 回答
31866 浏览

c - 如何在内存中缓冲标准输出并从专用线程写入

我有一个带有许多工作线程的 C 应用程序。重要的是这些不会阻塞,因此在工作线程需要写入磁盘上的文件的地方,我让它们写入内存中的循环缓冲区,然后有一个专用线程将该缓冲区写入磁盘。

工作线程不再阻塞。专用线程可以在写入磁盘时安全地阻塞而不影响工作线程(在写入磁盘时它不持有锁)。我的内存缓冲区被调整到足够大,以至于编写器线程可以跟上。

这一切都很好。我的问题是,我如何为标准输出实现类似的东西?

我可以宏 printf() 写入内存缓冲区,但我无法控制可能写入标准输出的所有代码(其中一些在第三方库中)。

想法?尼克B

0 投票
3 回答
936 浏览

perl - Perl 的 $| 设置影响系统命令?

我正在查看 Perl 中的一些旧代码,作者 $| = 1在第一行写过。

但是代码没有任何打印语句,它使用system命令调用 C++ 二进制文件。现在我读到$|每次打印后都会强制刷新。它是否会以任何方式影响系统命令的输出,或者我可以安全地删除该行。

谢谢阿文德

0 投票
2 回答
264 浏览

.net - 如何缓冲 .net BackgroundWorker 的输出?

我有一个来自外部源的数据流,我目前在BackgroundWorker. 每次它获得另一块数据时,它都会使用ReportProgress()调用将该数据呈现给 GUI。

我得到的印象是该ProgressChanged函数只是一个同步机制,所以当我的工作线程调用它时,两个线程都被锁定,而 GUI 线程处理更改。所以我认为问题在于,当后台线程更新 GUI 时,它无法接收任何数据,这意味着我们丢失了一些数据包。这是正确的还是我的丢包更有可能来自其他地方?

如果这原因,那么添加第二个线程来进行 GUI 更新是一个合理的解决方案,还是有更好/更彻底的方法来解决我应该深入研究的这些问题?

非常欢迎任何想法和建议。

0 投票
2 回答
1445 浏览

java - JAVA NIO ByteBuffer 分配以适应最大的数据集?

我正在开发一款在线游戏,在服务器端工作时遇到了一些问题。

在 Java 中使用非阻塞套接字时,处理在所有数据可用之前无法处理的完整数据包数据集的最佳操作方案是什么?例如,通过套接字发送大型 2D 平铺地图。

我可以想到两种方法来处理它:

  1. 分配足够大的 ByteBuffer 以处理处理我的示例中的大型 2D 平铺地图所需的完整数据集。继续将读取数据添加到缓冲区,直到它全部被接收并从那里处理。

  2. 如果 ByteBuffer 的大小较小(可能为 1500),则可以完成后续读取并将其放入文件中,直到可以从文件中完全处理它。这将避免必须拥有大的 ByteBuffer,但会因为磁盘 I/O 而降低性能。

我为每个 SocketChannel 使用了一个专用的 ByteBuffer,这样我就可以继续读取数据,直到它完成处理。问题是,如果我的 2D Tiled Map 大小达到 2MB,那么使用 1000 个 2MB ByteBuffers 真的明智吗(假设 1000 是客户端连接限制并且它们都在使用中)?一定有更好的方法,我没有想到。

我宁愿保持简单,但我愿意接受任何建议并感谢您的帮助。谢谢!

0 投票
1 回答
1838 浏览

sockets - 是 Socket.BeginReceive(IList> 缓冲区.. 不是异步的?

我一直在寻找实现一个自定义类:

这将被传递给一个套接字,并用作从该套接字接收数据的缓冲区。

MSDN 文档

在测试时我发现打电话时

开始接收(IList..

挡住了?!当用 BeginReceive(byte[]... 替换它时,它是异步操作的。

有没有其他人遇到过这个?

如果需要,我会发布我的测试代码,但在我丑化这个问题之前,我想听听任何人的意见:)

谢谢!

0 投票
2 回答
3585 浏览

php - 在 php 中缓存文件的最佳方法是什么?

我在我的 php 代码中使用 Smarty,我喜欢缓存一些网站页面,所以我使用了以下代码:

但是当我在 php 文件末尾打印 ob_get_contents() 时,它是空的!实际上创建的缓存文件也是空的!那么当我使用 smarty 时如何在 php 中缓存文件我知道我可以使用 smarty 缓存,但由于某种原因它对我不起作用。

另外请给我有关 APC 缓存的信息。如何使用它?在我的情况下是否值得使用,我认为它只是用于缓存数据库查询,我阅读了关于它的 php 手册,但我什么也得不到:) 坦克。

0 投票
12 回答
99614 浏览

algorithm - 一种用于膨胀/放气(偏移、缓冲)多边形的算法

我将如何“膨胀”多边形?也就是说,我想做类似的事情:

替代文字

要求是新的(膨胀的)多边形的边缘/点与旧的(原始)多边形的距离相同(在示例图片上它们不是,因为那时它必须使用弧来膨胀顶点,但是让我们暂时忘记这一点;))。

我正在寻找的数学术语实际上是向内/向外多边形偏移。+1 balint 指出这一点。另一种命名是多边形缓冲

我的搜索结果:

以下是一些链接: