• Lecture 5 Threads(线程)


    1 线程定义

    动机

    • 一个应用通常需要同时处理很多工作,比如一个Web浏览器,可能需要同时处理文字和图片,这些同时执行的任务可称为“执行流”,我们不希望它们是顺序执行的。
    • 早期,每个执行流都要创建一个进程来实现,但是进程的创建需要消耗大量的时间和资源。
    • 现在,和一个应用相关的所有执行任务都装在一个进程里,这些进程内部的执行任务就是“线程”(Thread)

    在这里插入图片描述

    多线程的优点

    • 响应性:线程之间的响应速度快
    • 资源共享:节约资源
    • 经济:
    • 可伸缩性:不同的线程可以在多核CPU时并行运行

    多线程的定义

    • 线程是 CPU 利用率的基本单位,包含了线程的id,CPU的计数器,寄存器和栈。
    • 线程和同一进程中的线程共享text,data和其他操作系统资源,比如说打开的文件和信号。
    • 如果一个进程中有多个线程控制,可以同时运行多个任务。

    2 多线程模型

    多核编程
    在多处理器系统中,多核编程机制让应用程序可以更有效地将自身的多个执行任务(并发的线程)分散到不同的处理器上运行,以实现并行计算。

    在这里插入图片描述


    多线程模型

    • 用户线程ULT(User Level Thread)
      • ULT在user mode下运行,它的管理无需内核支持。
    • 内核线程KLT(Kernel Level Thread)
      • KLT在kernel mode下运行,由操作系统支持与管理。

    在这里插入图片描述

    三种多线程模型
    在这里插入图片描述


    在这里插入图片描述


    ![在这里插入图片描述](https://img-blog.csdnimg.cn/6f04de86e63f46f4bf47f7354fd0878a.png)

    线程库

    • Thread Library为程序员提供创建和管理线程的API
      • POSIX Pthreads:用户线程库和内核线程库
      • Windows Threads:内核线程库
      • Java Threads:依据所依赖的操作系统而定

    PTHREADS

    Pthreads是POSIX标准定义的线程创建与同步API。
    不同的操作系统对该标准的实现不尽相同。
    本节实验所用的API是Linux对Pthreads的实现

    3 实验

    #include 
    #include 
    #include 
    #include 
    
    void* threadFunc(void* arg){ //线程函数
        // sleep(3);    
        printf("In NEW thread\n");
    
    }
    
    int main()
    {
        pthread_t tid;
        
        //线程创建函数
        /*参数列表
        1. Thread id address
        2. Thread attributes address
        3. Thread function address
        4. Thread parameters address
        */
        
        pthread_create(&tid, NULL, threadFunc, NULL);
        
        //等待指定的线程结束
        //pthread_join(tid, NULL);
        
        printf("In main thread\n"); 
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    有一个疑惑的地方,如果这句 pthread_join(tid, NULL); 放在 printf(“In main thread\n”); 后面就可以等待三秒执行,如果放在前面,则程序会先退出。
    编译该段代码时,请注意gcc要加入新的参数,命令如下:

    gcc helloThread.c -o helloThread -l pthread
    gcc helloThread.c -o helloThread pthread (常用)

  • 相关阅读:
    C++中将 sizeof() 用于类
    python的datetime模块常用的语法和实例
    一种用于环境声源的被动到达角(AoA)提取算法(Matlab代码实现)
    快速幂及矩阵快速幂
    Jemeter实现多用户登录的两种方式
    百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!
    SpringCloud之RocketMQ3
    写给技术人的管理入门知识1:什么是管理
    文件操作 和 IO - 详解
    【Android进阶】3、Activity 的生命周期
  • 原文地址:https://blog.csdn.net/weixin_61823031/article/details/126431843