首页 > 其他分享 >学习笔记7

学习笔记7

时间:2023-10-29 18:11:05浏览次数:23  
标签:并行算法 算法 笔记 并行执行 学习 并行计算 线程 执行

一、知识点总结

本章论述了并发编程,介绍了并行计算的概念。指出了并行计算的重要性:比较了顺序算法与并行算法,以及并行性与并发性;解释了线程的原理及其相对于进程的优势;介绍了Pthread中的线程操作,包括线程管理函数,互斥量、条件变量和屏障等线程同步工具;解释了死锁问题,并说明了如何防止并发程序中的死锁问题;讨论了信号量,并论证了它们相对于条件变量的优点;还解释了支持Linux中线程的独特方式。

(一)并行计算基础

在早期,大多数计算机只有一个处理组件,称为处理器或中央处理器(CPU)。受这种硬件条件的限制,计算机程序通常是为串行计算编写的。要求解某个问题,先要设计一种算法,描述如何一步步地解决问题,然后用计算机程序以串行指令流的形式实现该算法。在只有一个CPU的情况下,每次只能按顺序执行某算法的一个指令和步骤。但是,基于分治原则(如二叉树查找和快速排序等)的算法经常表现出高度的并行性,可通过使用并行或并发执行来提高计算速度。并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速地解决问题。过去,由于并行计算对计算资源的大量需求,普通程序员很少能进行并行计算。近年来,随着多核处理器的出现,大多数操作系统(如Linux)都支持对称多处理(SMP)。甚至对于普通程序员来说,并行计算也已经成为现实。显然,计算的未来发展方向是并行计算。因此,迫切需要在计算机科学和计算机工程专业学生的早期学习阶段引入并行计算。

顺序算法与并行算法

在描述顺序算法时,常用的方法是用一个begin-end代码块列出算法,如下方所示。

---       顺序算法      ---|---      并行算法       ---
       begin              |         cobegin
         step_1           |           task_1
         step_2           |           task_2
         ...              |           ...
         step_n           |           task_n
       end                |         coend
       //next step        |         //next step





begin-end代码块中的顺序算法可能包含多个步骤。所有步骤都是通过单个任务依次执行的,每次执行一个步骤。当所有步骤执行完成时,算法结束。相反,并行算法使用cobegin-coend代码块来指定并行算法的独立任务。在cobegin-coend块中,所有任务都是并行执行的。紧接着cobegin-coend代码块的下一个步骤将只在所有这些任务完成之后执行。

(二)并行性与并发性

通常,并行算法只识别可并行执行的任务,但是它没有规定如何将任务映射到处理组件。在理想情况下,并行算法中的所有任务都应该同时实时执行。然而,真正的并行执行只能在有多个处理组件的系统中实现,比如多处理器或多核系统。在单CPU系统中,只能执行一个任务。在这种情况下,不同的任务只能并发执行,即在逻辑上并行执行。在单CPU系统中,并发性是通过多任务处理来实现的。

(三)线程基本特点

  1. 线程的原理:线程是某进程同一地址空间上的独立执行单元。每个线程都可以创建更多的线程,它们在同一进程的相同地址空间中执行。通过使用线程编写并行执行的程序比使用进程编写更简单、更自然。

  2. 线程的优点:

    • 线程的创建和切换速度更快。
    • 线程的响应速度更快。
    • 线程更适合并行计算。
  3. 线程的缺点:

    • 线程需要来自用户的明确同步。
    • 许多库函数可能对线程不安全。
    • 在单CPU系统上,使用线程解决问题实际上要比使用顺序程序慢,这是由在运行时创建线程和切换上下文的系统开销造成的。

(四)线程操作

线程的执行轨迹与进程类似,线程可在内核模式或用户模式下执行。线程操作包括:

  • 创建线程:使用pthread_create()函数来创建线程,参数包括线程id、线程属性、线程函数和参数。
  • 线程终止:线程函数结束后,线程即终止。可以使用pthread_exit()函数进行显式终止。
  • 线程连接:一个线程可以等待另一个线程的终止,使用pthread_join()函数进行连接。




标签:并行算法,算法,笔记,并行执行,学习,并行计算,线程,执行
From: https://www.cnblogs.com/xuyuanqi/p/17796169.html

相关文章

  • linux学习-2
    进程管理一、静态查看进程状态ps查看静态进程psaux查看当前目录的进程USERPID  %CPU %MEMVSZRSSTTYSTATSTARTTIMECOMMAN用户名进程编号cpu占用率内存占用率占用虚拟内存占用实际内存进程运行终端进程状......
  • 2023-2024-1 20231417 《计算机基础与程序设计》第五周学习总结
    2023-2024-120231417《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第五周作业这个作业的目标<关于机器语言与汇编语言,pep9的相关应用,循坏算法的了解与......
  • 《信息安全系统设计与实现》第八次学习笔记
    第四章:并发编程并行计算导论顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立任务,所有任务都是并行执行的,紧接着cobegin-coend代码块的下一个步骤将只在所有这些任务完成之后执......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记7
    学习笔记7顺序算法与并行算法线程的原理与优缺点线程管理函数线程同步实践过程顺序算法与并行算法顺序算法(SequentialAlgorithm)原理:顺序算法是一种线性执行的算法,它按照顺序一步一步地解决问题。这意味着每个操作都依赖于前一个操作的结果,只有在前一个操作完成之后才......
  • Unix/Linux系统编程自学笔记-第四章:并发编程
    1、并行计算并行计算并行计算是一种计算方法,通过使用多个执行并行算法的处理器相较串行计算更快地解决问题。现代多核处理器的结构能很好的实现并行计算。计算机的发展未来也是并行计算。顺序算法与并行计算顺序算法一般代码块格式如下,顺序算法的每个代码块可能包含多......
  • 王建民老师的期中测试(javaweb学习每日总结-第九天)
    第九天学习今天主要准备了一下建民老师明天考试的内容,也就是所谓的单表增删改查,目前我已经能比较熟练使用mybatis技术来进行数据库的增删改查,也做过了一两个实例,希望明天我能顺利通过王建民老师的测试。 ......
  • java基础漏洞学习----整数溢出漏洞+硬编码漏洞+不安全的随机数生成器
    java基础漏洞学习----整数溢出漏洞+硬编码漏洞+不安全的随机数生成器整数溢出漏洞publicclassNumberLearning{publicstaticvoidmain(String[]args){System.out.println(Integer.MAX_VALUE+1);System.out.println(Integer.MIN_VALUE-1);}}......
  • Linux shell编程学习笔记16:bash中的关联数组
    上一节我们探讨了普通的数组,即使用数字下标来索引数组中不同的元素的数组,也可以称之为索引数组。相比纯粹的数字,字符串不仅能表明含义,也更便于记忆使用,于是就有了关联数组。一、关联数组概述bash从4.0开始支持关联数组,关联数组可以使用可以使用任意的字符串、或者整数作为下标来......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • [学习笔记]--信息安全
    信息系统安全属性安全属性属性描述保密性最小授权原则,防暴露,信息加密,物理保密完整性安全协议,校验码,密码校验,数字签名,公证可用性综合保障(IP过滤,业务流程控制,路由选择控制,审计跟踪)不可抵赖性数字签名对称加密与非对称加密对称加密:加密和......