我们可以在没有多线程的情况下充分利用多核体系结构的优势吗?
答案 0 :(得分:0)
我们可以在没有多线程的情况下充分利用多核体系结构的优势吗?
对于常规环境;您可以在不使用多线程的情况下享受多CPU的一些好处(例如,如果您有8个CPU,并且您正在运行8个独立的单线程进程,那么...)。
对于非常规环境,谁知道呢?例如,也许整个系统都使用actor模型(软件分为多个独立的对象,其中每个对象都是事件处理程序),其中OS具有待处理事件队列,而每个CPU都会“从队列中获取事件,执行循环中相应对象的事件处理程序”。在这种情况下,您可以说根本没有线程(只有CPU和事件),因此没有多线程。
答案 1 :(得分:0)
我们可以在没有多线程的情况下充分利用多内核的优势吗?绝对没有但是我们仍然可以具有一些并行性。
正如已经回答的那样,我们可以在不同的处理器上运行几个独立的进程,以提高全局计算机的性能。
并且仍然可以通过进程间通信(IPC)作为管道或共享内存来进行并行处理。例如,如果做
taskset 0x01 sort | taskset 0x02 uniq
您将运行两个进程,在核心0上进行排序,并在核心1上进行uniq,这些进程将通过管道(在共享内存中实现)进行通信。请注意,这只是一个示例,操作系统确实在没有taskset指令的情况下在不同的内核上运行新进程。
使用posix shared memory IPC,您可以执行在不同内核上运行并在专用内存区域中交换数据的并行进程。
您可以使用openMPI在多核上运行多进程并行程序。共享内存将用于实现MPI消息传递。
但是,无论哪种情况,与多线程相比,编程负担都会更高,而性能则要低得多。