gpt4 book ai didi

windows-7 - Windows 7 : poor GUI response in my program while downloading data; is there some way to improve this?

转载 作者:可可西里 更新时间:2023-11-01 02:55:01 24 4
gpt4 key购买 nike

我编写了一个程序,它(除其他外)使用 TCP 从 LAN 上的服务器下载多个大文件。这个程序在 Linux、MacOS/X 下运行良好,通常在 Windows 下也能正常运行(它使用 Qt 作为 GUI,使用直接套接字调用网络),但在某些 Windows 机器上,下载似乎太多,机器无法处理,我想知道是否有人对为什么会这样以及可以采取什么措施有任何想法。

当下载文件时,我的程序会生成一个单独的 I/O 线程,该线程基本上处于一个循环中,通过 TCP 下载数据并将其写入文件,每次调用 QFile:write() 写入 128KB。每个文件通常有几百兆字节长,典型的下载 session 会写出几十个这样的文件。请注意,I/O 线程独立于 GUI 线程运行,因此我认为它不会对 GUI 的性能产生太大影响——尤其是在多核 PC 上运行时。

有问题的 PC 是运行频率为 2.40GHz 的 Core-2Duo Quad Q6600,具有 4GB 内存。它运行的是 32 位 Windows 7 Ultimate SP1。它通过千兆以太网连接接收数据,并将其写入 232GB 内部 Hitachi ATA 驱动器的 NTFS 格式引导分区上的文件。

症状是有时在下载过程中(看似随机)程序的 GUI 一次会变得无响应 10 到 30 秒,并且窗口的标题栏通常会附加“(无响应)”给它。然后症状将再次消失,下载将再次正常进行。另一个症状是桌面在下载过程中非常缓慢...例如,如果我单击“开始”按钮,“开始”菜单将需要大约 30 秒来填充,而不是像我预期的那样几乎立即填充.

请注意,任务管理器显示大量可用内存,但它确实显示 4 个内核之一的 CPU 使用率出现短暂峰值,达到 100%,同时出现问题。

数据通过千兆以太网到达,如果我的程序只接收数据并将其丢弃(不将其写入硬盘驱动器),则机器可以保持大约 96MB/秒的恒定下载速率而不会中断出汗。但是,如果我将接收到的数据写入文件,下载速率将下降到大约 37MB/秒,并且开始出现上述症状。

有趣的是,出于好奇,我将这个调用添加到我的 I/O 线程的入口函数中,就在它的事件循环开始之前:

SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);

当我这样做时,“(无响应)”症状消失了,但随后下载速度降至仅约 25MB/秒。

所以我的问题是:

  • 有谁知道当硬盘驱动器处于高写入负载下时,可能导致 GUI 偶尔挂起的原因是什么?

  • 既然机器上有三个空闲核心,为什么降低 I/O 线程的优先级会导致下载速率下降如此之多?我认为在这种情况下,即使是较低优先级的线程也会有足够的 CPU 可用。

  • 有什么方法可以在不导致 Windows 的桌面响应和/或我的应用程序的 GUI 响应出现问题的情况下获得最大下载速率?

最佳答案

没有看到任何代码很难回答,但这似乎与处理器有关,而且您的下载线程没有为其他线程留出任何空间来执行其他操作。

好像是从不等待,网卡驱动没写好。当没有数据传入时,您确定您的线程进入空闲状态吗?在具有单个处理器的操作系统中,a for (;;) {} 将消耗 100% 的 CPU,如果它持续与内核对话,它可能会停止其他进程或其他线程来执行此操作,尤其是在存在错误或非常糟糕的行为时在您的情况下的某些网卡驱动程序中。

可能将线程优先级设置为低于正常值,您是在要求操作系统减少使用线程的频率,这是一种神奇的组合,可以让事情不会挂得太久。检查代码,也许您忘记了什么?

检查添加 sleep(0) 以强制操作系统在某个时候让步给另一个线程是否会让事情变得更好,但这是一个临时修复,你应该找出你的线程消耗 100% cpu 的原因,如果是的话。

关于windows-7 - Windows 7 : poor GUI response in my program while downloading data; is there some way to improve this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com