![]() |
1
58
到目前为止,大多数答案都与操作系统调度程序有关。然而,我认为还有一个更重要的因素会导致你的答案。您是向单个物理磁盘还是向多个物理磁盘写入? 即使您使用多个线程进行并行处理,对单个物理磁盘的IO本质上也是一种序列化操作。每个线程都必须阻塞,等待有机会访问磁盘。在这种情况下,多个线程可能是无用的……甚至可能导致争用问题。 但是,如果要将多个流写入多个物理磁盘,那么并发处理它们应该会提高性能。对于受管磁盘尤其如此,如RAID阵列、SAN设备等。
|
![]() |
2
9
这取决于“I/O绑定”的定义,但通常多线程有两种效果:
然而,我不确定Konrad的答案是否总是正确的:作为反例,如果“I/O绑定”仅仅意味着“一个线程花费大部分时间等待I/O完成,而不是使用CPU”,但是 不 意味着“我们已经达到了系统I/O带宽限制”,那么IMO拥有多个线程(或异步I/O)可能会提高性能(通过启用多个并发I/O操作)。 |
![]() |
3
3
我认为这取决于很多因素,比如你正在运行的应用程序的类型,并发用户的数量等等。 我目前正在从事一个具有高度线性(从头到尾读取文件)操作的项目。我们使用NAS进行存储,并且担心如果我们运行多个线程会发生什么。我们最初的想法是它会让我们慢下来,因为它会增加头。因此,我们进行了一些测试,发现理想的线程数与计算机中的内核数相同。 但是你的里程数可能会有所不同。 |
![]() |
4
2
它可以做到这一点,原因很简单,因为每当线程有更多的工作要做(识别下一个要复制的文件)时,操作系统就会将其唤醒,因此线程是一种简单的方法,可以挂接到操作系统调度程序中,但仍然以传统的顺序方式编写代码,而不必将其分解为带有回调的状态机。
|
![]() |
5
1
在大多数情况下,对磁盘IO使用多线程不会提高效率。让我们想象两种情况:
如果我错了,请纠正我。 |
![]() |
6
0
不,这毫无意义。在某些时候,操作必须(由操作系统)序列化。另一方面,由于现代操作系统必须处理多个进程,我怀疑这会增加额外的开销。 |
![]() |
7
0
我想这会妨碍手术。。。您只有一个控制器和一个驱动器。 您可以使用第二个线程来执行该操作,也可以使用一个主线程来显示更新的UI。 |
![]() |
8
0
您可以通过将一组文件从一个位置复制到另一个位置并测量时间,然后将文件集拆分为两部分并并行复制,来测试在同一设备上执行并发IO操作的影响。。。第二种选择的速度要慢得多。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 2 年前 |