并行VS异步编程
Parallel VS asynchronous programming
虽然我尝试深入研究这两种技术,但我仍然有点不清楚这些技术用于哪些问题和情况。
如果我对此进行简化,CPU 绑定的问题是否可以通过并行和 IO 绑定的异步编程来处理?
也许这个问题的更好标题是 'to block or not to block?',因为并行或异步并不相互排斥。
我建议在一个问题上使用多个线程 1) 当它既是 CPU 绑定时,又可以拆分成不需要 coordination/sharing 完成的多个部分,或者 2)作业可能会在 IO 上停滞很长一段时间,我们不想阻止其他工作的发生。
异步基本上意味着,不要阻塞等待某事完成的线程。而是依赖于将通知其完成的回调。因此当只有一个工作线程时可以异步。
异步技术最近重新出现,因为它们比阻塞技术具有更好的扩展性。这是因为在管理这些线程的开销占主导地位之前,我们在单个系统上可以拥有多少线程是有限的。
虽然我尝试深入研究这两种技术,但我仍然有点不清楚这些技术用于哪些问题和情况。
如果我对此进行简化,CPU 绑定的问题是否可以通过并行和 IO 绑定的异步编程来处理?
也许这个问题的更好标题是 'to block or not to block?',因为并行或异步并不相互排斥。
我建议在一个问题上使用多个线程 1) 当它既是 CPU 绑定时,又可以拆分成不需要 coordination/sharing 完成的多个部分,或者 2)作业可能会在 IO 上停滞很长一段时间,我们不想阻止其他工作的发生。
异步基本上意味着,不要阻塞等待某事完成的线程。而是依赖于将通知其完成的回调。因此当只有一个工作线程时可以异步。
异步技术最近重新出现,因为它们比阻塞技术具有更好的扩展性。这是因为在管理这些线程的开销占主导地位之前,我们在单个系统上可以拥有多少线程是有限的。