![]() |
1
23
当然。如果您的软件经常使用磁盘或网络IO,您通常可以通过添加更多线程来提高吞吐量。当其他线程阻塞IO时,这些额外的线程将处于唤醒状态并执行任务。 |
![]() |
2
12
另一些人谈到了一些情况,在这些情况下,它几乎肯定是有意义的(当你做任何一种缓慢的IO时)。 它可能 不 如果:
和
在这种情况下,可能会导致不必要的缓存未命中。 |
![]() |
3
6
如果
|
![]() |
4
4
简短的回答是“是”。 即使认为在多处理器环境中进行多线程处理可以获得更多的好处,它仍然是单处理器机器上的一项有用技术,主要是因为它意味着您将一些工作委托给流程调度器,后者应该比您拥有的信息更好。 如果你不使用多线程,你最终会自己完成调度任务,如果你需要的话,这可能是件好事,但很可能是既单调又低效的事情。 |
![]() |
5
3
每当您有一个任务在等待一个I/O操作时,将它封闭在一个线程中并激发它确实是有意义的。在等待I/O操作完成时,线程很可能会挂起。当它被唤醒时,结果将等待它。 |
![]() |
6
3
其中一个好处是当您升级硬件时,可能会得到更多的处理器/核心。 |
![]() |
7
2
因为所有的现代操作系统都是多任务的:每个线程都从处理器获得一个时间共享。它实际上不是并发执行,但考虑到处理器每秒可以处理数千个请求,它是一个“明显”的并发执行。 所以是的,如果情况需要的话,在一个处理器上多线程是有意义的。 |
![]() |
8
1
我发现,当编写通过网络处理较大数据集的数据解析器时,最好为字母表中的每个字母(与数据相关)创建一个线程,并使程序更受CPU和内存限制。通过网络和磁盘操作继承I/O有界性是一个主要的瓶颈,因此您也可以“开始”其他数据文件,而不是按顺序进行工作。 在四核上,启动四个以上的线程当然是有意义的。这4个线程不太可能分布在多个核心上,特别是在当今的处理器速度下。 |
![]() |
9
1
根据Herb Sutter(并发性方面的主要专家之一)的说法, Pillars of Concurrency 是 通过异步代理进行响应和隔离 . 总结如下: 通过独立运行任务和异步运行任务,通过消息进行通信来保持响应。 伟大的文章(以及整个系列!)我还在等那本书。 |
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 2 年前 |
![]() |
Grant · goroutines有高空闲唤醒电话 3 年前 |
![]() |
hoaz · 如何安全地清理并发映射 7 年前 |
![]() |
Alanpatchi · int基元类型的volatile声明 7 年前 |