• 344查看
  • 0回复

[硬件底层] 思考一个程序设计问题:单核多线程的意义是什么?

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 9-4-2024 19:58:44 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    一切开始的前提是,你需要知道,CPU执行的所有代码其实就是一条条指令。

    对于单核CPU来说,运行你的代码需要n秒。但实际上这往往需要n秒多,因为你的CPU还需要处理很多可能的中断,这种高优先级的终端就会拉长你的程序的实际执行时间。

    无论使用多少个线程,假如单个CPU每执行一行代码就是m秒,那这两行代码怎么也得要2m秒。所以单核情况下,多线程并不会提高代码执行效率。

    单核多线程的意义到底是什么呢?

    单核多线程在于提高程序的响应性和并发性,允许程序在等待某些操作完成的同时执行其他任务,从而提高系统的利用率和用户体验。

    具体用途包括但不限于:处理IO密集型任务、实现异步操作、提高系统的并发性等。

    下面以一个简单的C语言示例来说明单核多线程的用途,假设我们有一个程序需要同时下载多个文件,可以使用多线程实现并发下载,提高下载效率:
    #include<stdio.h>#include<stdlib.h>#include<pthread.h>
    #define NUM_THREADS 3
    void *download_file(void *file_name){char *file = (char *)file_name;printf("Downloading file: %s\n", file);// 模拟文件下载过程// 这里可以调用下载文件的函数
    printf("Download completed: %s\n", file);    pthread_exit(NULL);}
    intmain(){pthread_t threads[NUM_THREADS];char *files[NUM_THREADS] = {"file1.txt", "file2.txt", "file3.txt"};
    for (int i = 0; i < NUM_THREADS; i++) {int ret = pthread_create(&threads, NULL, download_file, (void *)files);if (ret) {            perror("Error creating thread");exit(EXIT_FAILURE);        }    }
    for (int i = 0; i < NUM_THREADS; i++) {        pthread_join(threads, NULL);    }
    return0;}

    以上示例使用了三个线程并发下载三个文件,每个线程负责下载一个文件。在单核情况下,由于线程调度的特性,当一个线程在等待文件下载时,CPU可以切换到其他线程执行任务,从而实现并发下载,提高下载效率。

    总的来说,单核多线程的意义在于提高程序的并发性和响应性,允许程序在等待某些操作完成的同时执行其他任务,从而提高系统的利用率和性能。

    思考一个程序设计问题:单核多线程的意义是什么?w3.jpg

    思考一个程序设计问题:单核多线程的意义是什么?w4.jpg



      来区分一下这些算力单位:TOPS、FLOPS、MIPS、DMIPS



    引用 Refreences

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 20-11-2024 17:12 , Processed in 0.288165 second(s), 30 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.