【发布时间】:2019-02-19 18:06:06
【问题描述】:
我们能否在不使用多线程的情况下充分利用多核架构的优势?
【问题讨论】:
标签: multithreading operating-system multicore
我们能否在不使用多线程的情况下充分利用多核架构的优势?
【问题讨论】:
标签: multithreading operating-system multicore
我们能否在不使用多线程的情况下充分利用多核架构的优势?
适用于常规环境;您可以在不使用多线程的情况下获得多 CPU 的一些好处(例如,如果您有 8 个 CPU 并且正在运行 8 个单独的单线程进程,那么......)。
对于非常规环境,谁知道呢?例如,可能整个系统使用actor模型(软件分为单独/独立的对象,其中每个对象都是一个事件处理程序),其中操作系统有一个未决事件队列,每个 CPU 确实“从队列中获取事件,执行该事件的相应对象的事件处理程序”在循环中。在这种情况下,您可以说根本没有线程(只有 CPU 和事件),因此没有多线程。
【讨论】:
我们能否在没有多线程的情况下充分利用多核的全部优势?绝对没有。但是我们仍然可以有一些并行性。
正如已经回答的那样,我们可以在不同的处理器上运行多个独立的进程来提高全局计算机性能。
并且仍然可以通过进程间通信 (IPC) 作为管道或共享内存进行并行处理。例如,如果做
taskset 0x01 sort | taskset 0x02 uniq
您将运行两个进程,在 core 0 上排序,在 core 1 上运行 uniq,这些进程将通过管道进行通信(在共享内存中实现)。请注意,这只是一个示例,操作系统确实在没有任务集指令的情况下在不同的内核上运行新进程。
使用 posix shared memory IPC,您可以在不同的内核上运行并行进程并在专用内存区域中交换数据。
您可以使用openMPI 在多核上运行多进程并行程序。共享内存将用于实现 MPI 消息传递。
但无论哪种情况,与多线程相比,编程负担都会更高,性能也会低很多。
【讨论】: