相关疑难解决方法(0)

是否可以在Linux x86 GAS程序集中创建没有系统调用的线程?

在学习"汇编语言"(在使用GNU作为汇编程序的x86架构上的linux中)时,其中一个时刻就是使用系统调用的可能性.这些系统调用非常方便,有时甚至是必需的,因为您的程序在用户空间中运行.
然而,系统调用在性能方面相当昂贵,因为它们需要中断(当然还有系统调用),这意味着必须从用户空间中的当前活动程序到内核空间中运行的系统进行上下文切换.

我想说的是:我目前正在实现一个编译器(用于大学项目),我想要添加的一个额外功能是支持多线程代码以提高编译程序的性能.因为一些多线程代码将由编译器本身自动生成,所以这几乎可以保证其中也会有很少的多线程代码.为了获得性能,我必须确保使用线程可以实现这一点.

但我担心的是,为了使用线程,我必须进行系统调用和必要的中断.因此,微小的(自动生成的)线程将受到进行这些系统调用所花费的时间的极大影响,这甚至可能导致性能损失......

因此,我的问题是双重的(在其下面有一个额外的奖励问题):

  • 是否可以编写汇编代码,可以同时在多个内核上同时运行多个线程,无需系统调用?
  • 如果我有非常小的线程(在线程的总执行时间很小),性能损失,或者根本不值得努力,我会获得性能提升吗?

我的猜测是没有系统调用就不可能有多线程汇编程序代码.即使是这种情况,您是否有建议(甚至更好:一些实际代码)尽可能高效地实现线程?

linux assembly multithreading gnu-assembler

35
推荐指数
4
解决办法
3万
查看次数

标签 统计

assembly ×1

gnu-assembler ×1

linux ×1

multithreading ×1