问题标签 [io-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.
erlang - 如何在 Erlang 的标准输入中按字符读取
我正在尝试编写一个基本的视频游戏,并希望从键盘输入输入。因此,我需要读取标准输入上的字符,因为它们是生成的。由于缓冲,io:get_chars, io:fread 只有在按下返回键后才会返回。
- 是否可以在标准输入中访问生成的字符?
- 我该怎么做?
该项目的重点不是制作一个真实的游戏,它只是一种学习 Erlang 的方式。因此性能不是问题。
编辑:这个项目似乎提供了我正在寻找的功能。不过,如果我没记错的话,部分代码是用 C 编写的,并通过消息传递将字符发送到 Erlang 部分。这种方法是否有替代 Erlang 原生的替代方法,或者这是唯一可行的方法?
java - 在写入文件时计算java中文本文件的大小
这个问题是对这个问题中接受的答案的跟进。我正在尝试实施 Aaron 建议的方法:包装 FileOutputStream 以包含逻辑以记录迄今为止写入的字节数。然而,这种方法似乎并没有按预期工作。OutputStreamWriter 似乎正在使用StreamEncoder,它在委托调用 FileOutputStream.write() 方法之前缓冲数据。
这是一个小演示:
和驱动程序类:
输出 :-
写入字节数:0
写入字节数:0
...
写入字节数:8192
写入字节数:8192
...
如输出所示,StreamEncoder 在委托调用 FileOutputStream 的 write() 方法之前最多缓冲 8192 个字节。是否有任何解决方法可以在任何时刻将字节数写入文件?
qt - 如何将数据存储在 Qt 中的“动态缓冲区”中?
我试过QBuffer但它似乎对我没有用。我需要类似Java中的Buffer 类的东西
即,我想在缓冲区中注入数据,并且当我读取 n 大小的数据(从末尾)时,应该将其删除或将查找指针移动到正确的位置。
上下文:我必须通过串口发送文件(逐行)。主程序注入文件和我的管理连接的线程,尽可能从缓冲区发送数据。
linux-kernel - Using user-buffered I/O for File operations
I am a newbie to system programming please mind me if my doubt is very vague.
I read that inbuilt user-space buffers are used so that we can access block sized data through a system call via the kernel which takes a huge over head but in the user-space we can make minute access to small sized data.I understood how this method is efficient but what i did not understand is,since these user-buffers are pertained to each single process that opens the file.
How will a process recognize the minute changes that are made to a file when both are simultaneously accessing the file.
Does this not create a problem as processes will access the old data but not the data that is changed by some other process which is still in the user-space buffer.
Please mind me if any mistakes.
sql-server - SQL server - 高缓冲 IO 和网络 IO
我有一个关于 SQL Server 的性能调整问题。
我有一个需要每个月运行的程序,它需要超过 24 小时才能完成。我需要调整这个程序,希望可以将运行时间减少到 12 小时或更短。
由于该程序不是我们开发的,我无法检查程序内容并对其进行修改。我所能做的就是打开 SQL 服务器分析器和活动监视器来跟踪和分析 sql 内容。我禁用了未使用的触发器并做了一些内务处理,但运行时间只减少了 1 小时。
发现网络I/O和缓冲区I/O偏高,不知道是什么原因和含义?
谁能告诉我这两个问题(网络 I/O 和黄油 I/O)的原因?对优化这个程序有什么建议吗?
谢谢!
java - Java with NetBeans 7.2.1 - 执行顺序问题
考虑 NetBeans Java 应用程序中的以下两个类。主要类:
像这样的工人阶级:
奇怪的是,输出结果如下:
它应该在哪里:
如果我将 netbeans 的处理器亲和性设置为仅使用一个 cpu 核心,那么至少初始部分是好的,而另一个控制消息(工人停止。)仍然是碎片化的。受输出消息的干扰。
使用 Eclipse 执行相同的操作会产生预期的执行顺序。
有谁知道这里发生了什么?- 非常感谢您提前提供的任何建议!
PS:NetBeans 7.2.1 使用 jdk1.7.0_03,Eclipse 版本是 Mars.2 Release (4.5.2) - 将代码从 worker 类转移到 main 类的 main 方法而不使用其他方法时甚至出现问题根本比主要方法。
python - 从 Windows 上的 subprocess.stdout 实时读取
需要强调的是,问题是实时读取而不是非阻塞读取。之前有人问过,例如subprocess.Popen.stdout - 实时读取标准输出(再次)。但是没有提出令人满意的解决方案。
例如,以下代码尝试模拟 python shell。
但是,从p.stdout
. 搜索了一圈后,我发现了以下两种可能的解决方案。
虽然第一个解决方案可能工作并且只在 linux 上工作,但第二个解决方案只是将阻塞读取转换为非阻塞读取,即我无法获得子进程的实时输出。例如,如果我输入 ' ',则使用第二种解决方案print("hello")
将一无所获。p.stdout
也许,有人会建议p.communite
。不幸的是,它不适合这种情况,因为它会关闭标准输入,如此处所述。
那么,有什么适用于Windows的解决方案吗?
已编辑:即使-u
打开并p.stdout.read
替换为p.stdout.readline
,问题仍然存在。
解决方案:以下是基于 JF Sebastian 的回答和评论的最终代码。
需要注意的是,当命令触发无输出时,程序会挂起。
bash - Cygwin 终端缓冲区 STDOUT
我使用 Altera Quartus 软件,它带有自己的 Cygwin 发行版和一个哑终端,根据 Altera 在我的“开始”菜单中放置的快捷方式,使用
这个批处理文件为 Quartus 配置环境并启动 bash。当我使用此窗口运行 Altera 工具时,它们的输出会立即(未缓冲)和彩色输出。
我也有我自己的带有 Xserver 和终端(即 lxterminal、mrxvt、xfce4-terminal 等)的 Cygwin 安装。我已经修改了 Altera 的批处理文件以在 Cygwin 中配置 Altera 的环境,并且我可以运行 Altera 的所有工具。但是,当我运行这些工具时,它们的输出既不是彩色的(没什么大不了的,但令人惊讶),并且在所有输出同时出现时缓冲直到执行结束。
有人对如何绕过这种缓冲有任何想法吗?
c - 标准 I/O 流 -- fgets() 缓冲类型
《unix环境中的高级编程》一书在第15章讨论了管道,它表明我们在处理标准I/O函数时应该注意缓冲类型。
不同打开的标准 I/O 流的缓冲类型是(在本书的第 5 章中讨论):
- 标准误是
unbuffered
- 连接到终端设备的流是
line-buffered
- 所有其他流是
fully-buffered
当父/子连接到 a时,他们用来通信pipe
的端(应该是类型对象,根据接口)应该根据上面的规则列表(因为它是连接到的流)。但是那一章中示例代码的行为似乎不是。FILE *
fully-buffered
pipe
fully-buffered
这是示例代码:
myuclc.c:
popen1.c:
所以我的问题是:fgets()
在第 15 行popen1.c
应该fully-buffered
根据缓冲规则,为什么它的行为类似于line-buffered
或unbuffered
:
此外,我之前也尝试setvbuf()
过fgets()
专门将缓冲类型设置为_IOFBF
(full-buffered) of fpin
,还是不行。
bash - bash,链接 grep 命令,在数据到来时进行处理
当我使用单个 grep 命令时,它会实时处理和输出数据。
这是我的简单测试文件test.sh
:
我执行以下操作:
一切都很好。'a' 立即出现,然后是 'ab' 等。
但是当我像这样管道多个 grep 命令时
我只得到最后的输出,而不是它来的时候!终端保持空白,直到处理完整个文件,然后一次性输出所有内容。
这是为什么?
我如何链接/级联多个 grep 而不会丢失“过程和输出”属性?
这是用于 greping 和处理具有大量数据的实时大型日志,我只有机会将过滤后的版本保存到磁盘,而不是会很快填满磁盘的巨大原始输出。