Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程与进程(C)_C_Linux_Multithreading_Time_Process - Fatal编程技术网

线程与进程(C)

线程与进程(C),c,linux,multithreading,time,process,C,Linux,Multithreading,Time,Process,我制作了3个不同版本的程序。这个程序将矩阵相乘 第一个版本按顺序执行 第二个将第一个矩阵除以2,并创建两个进程来相乘 第三个版本与(2)相同,但使用线程 我用非常大的矩阵来测试这个,我有两个CPU 我用“时间”来测试时间: 1. real: 5.6s / user: 5.2s / sys: 0.4s 2. real: 2.9s / user: 2.5s / sys: 0.4s 3. real: 2.7s / user: 4.2s / sys: 1.0s “实时”正是我所期待的。但是,我有两

我制作了3个不同版本的程序。这个程序将矩阵相乘

  • 第一个版本按顺序执行

  • 第二个将第一个矩阵除以2,并创建两个进程来相乘

  • 第三个版本与(2)相同,但使用线程

  • 我用非常大的矩阵来测试这个,我有两个CPU

    我用“时间”来测试时间:

    1. real: 5.6s / user: 5.2s / sys: 0.4s
    
    2. real: 2.9s / user: 2.5s / sys: 0.4s
    
    3. real: 2.7s / user: 4.2s / sys: 1.0s
    
    “实时”正是我所期待的。但是,我有两个问题:

  • (3)中发生了什么?为什么“用户时间”大于“实时”

  • “系统时间”不应该少用线程吗?知道创建进程比创建线程需要更长的时间


  • 显然,您的
    time
    命令版本理解多核处理器上的线程。每个线程(在自己的核心上运行)需要2.1个用户秒和0.5个sys秒,这将为您提供2.6个实秒。同样的事情在第二个版本中不会发生,因为
    time
    没有考虑第二个进程。“知道进程创建比线程创建要长…”-创建时间非常短。这不是一个因素。如何重新组合(2)和(3)中单独乘法的结果?您只是在适当地测量打印结果的I/O时间吗?我在(2)中使用了pipe(),在(3)中使用了一个全局矩阵数组(这对两个线程都是全局的)。此外,没有I/O。我有一个函数可以随机化矩阵。我只需设置每个矩阵的行数,程序就会生成它们。显然,您的
    time
    命令版本理解多核处理器上的线程。每个线程(在自己的核心上运行)需要2.1个用户秒和0.5个sys秒,这将为您提供2.6个实秒。同样的事情在第二个版本中不会发生,因为
    time
    没有考虑第二个进程。“知道进程创建比线程创建要长…”-创建时间非常短。这不是一个因素。如何重新组合(2)和(3)中单独乘法的结果?您只是在适当地测量打印结果的I/O时间吗?我在(2)中使用了pipe(),在(3)中使用了一个全局矩阵数组(这对两个线程都是全局的)。此外,没有I/O。我有一个函数可以随机化矩阵。我只需设置每个矩阵的行数,程序就会生成它们。也没有输出,只是乘法运算。