首页 > 其他分享 >第四章知识的完整性总结

第四章知识的完整性总结

时间:2023-10-27 15:35:26浏览次数:29  
标签:总结 并行计算 死锁 线程 pthread 进程 完整性 执行 第四章

1.进程(Process): 进程是独立运行的程序实例,具有各自的地址空间和资源。在Unix/Linux中,进程可以通过fork()或clone()系统调用创建。

2.线程(Thread): 线程是进程中的执行单元,共享进程的地址空间和资源,但有各自的栈和寄存器。线程可以通过pthread库来创建和管理。

3.进程间通信(Inter-Process Communication, IPC): 进程间通信是让进程之间协调工作和共享资源的机制,主要包括管道(pipe)、消息队列(message queue)、信号(signal)、共享内存(shared memory)和信号量(semaphore)等。

4。同步和锁(Synchronization and Locking): 进程和线程同步是确保他们按预期的顺序执行的机制,主要包括互斥量(mutex)、条件变量(condition variable)、读写锁(read-write lock)和信号量(semaphore)等。

5.非阻塞I/O和异步I/O(Non-blocking and Asynchronous I/O): 非阻塞I/O和异步I/O允许在等待I/O操作完成时执行其他任务,从而提高程序的性能。

6.死锁(Deadlock): 死锁是一种状态,其中两个或多个进程/线程互相等待对方释放资源,从而导致所有进程/线程都无法继续执行。理解和避免死锁是并发编程的重要部分。

7.条件竞争(Race Condition): 条件竞争发生在两个或多个线程/进程访问和修改同一数据时,结果取决于这些线程/进程的相对执行顺序。避免条件竞争需要正确的同步。

概述

本章介绍了并发编程,主要涉及了并行计算、线程及其原理、线程防死锁操作等。较为全面的介绍了多任务处理、线程同步和并发编程的原理及方法。

目录

1、并行计算

2、线程

3、线程管理

4、线程同步

5、实践

1、并行计算

并行计算

并行计算是一种计算方法,通过使用多个执行并行算法的处理器相较串行计算更快地解决问题。现代多核处理器的结构能很好的实现并行计算。计算机的发展未来也是并行计算。

顺序算法与并行计算

顺序算法

一般代码块格式如下,顺序算法的每个代码块可能包含多个步骤。各个步骤都是通过单个任务依次执行,每次执行一个步骤。所有步骤都执行完后任务结束。

begin
step_1;
step_2;
...
step_n;
end
// next step
并行算法

一般代码块的结构如下,并行计算的代码块中的所有任务并行执行,所有任务都结束后执行下一步骤。

cobegin
task_1;
task_2;
...
task_n;
coend
// next step
并行性与并发性

并行性

一个并行算法中的所有任务同时都在运行,一般在理想情况下的多处理系统中可实现并行运算。

并发性

在单CPU系统中,一次只可执行单个任务,只能通过并发执行实现逻辑上的并行执行。

2、线程

线程介绍

线程是与进程共享地址空间的独立执行单元,同时,线程也与进程共享其他资源。线程可以创建与自己共享地址的子线程,子线程也可再创建自己的子线程,进程就是通过它的主线程和子线程实现任务处理的。不同的操作系统实现线程的方式不尽相同,但目前几乎所有的操作系统都支持IEEE POSIX 1003.1的线程标准Pthread。

线程的优点

创建和切换速度更块
响应速度更快
更适合并行计算
线程的缺点

需要来自用户的明确同步
库函数对于线程来说不够安全
单CPU系统中上下文切换耗时过大

3、线程管理

​ 线程与进程类似,也有内核模式和用户模式。用户模式下线程在其进程的相同地址中执行,每个线程都拥有各自的执行 堆栈。内核模式下则根据系统内核的调度策略执行系统调用,也有挂起、激活等过程。系统内核调用会优先选择同一进 程中的线程。

线程管理函数

大部分操作系统都兼容POSIX Pthread线程标准,Pthread提供了如下用于线程管理的程序编程接口:

pthread_create(thread, attr, function, arg); -> 创建线程
pthread_exit(status); -> 终止线程
pthread_cancel(thread); -> 取消线程
pthread_attr_init(attr); -> 初始化线程属性
pthread_attr_destroy(attr); -> 删除线程属性
创建线程

可以使用pthread_create()函数创建线程:

int pthread_create(pthread_t *pthread_id, pthread_attr_t *atr, void (func)(void *), void *arg);
如果创建成功则返回0,失败则返回错误代码。

参数:

pthread_id是指向pthread_t类型变量的指针。它会被操作系统内核分配的唯一线程ID填充。在POSIX中,pthread_t是一种不透明的类型.线程可以通过pthread_self()函数获得自己的ID。在Linux中,pthread_t类型被定义为无符号长整型,因此ID可以打印为%lu。

attr是指向另一种不透明数据类型的指针,它指向线程属性。

func要执行的新线程的新线程函数的入口地址。

arg指向线程函数参数的指针

void *func(void *arg);

4、线程同步

线程在进程的同一地址空间中执行,共享同一地址空间中的所有全局变量和数据结构。不同的线程对同一个共享资源进行操作时,如果结果取决于线程的执行顺序,就会产生竞争,这是并发程序所杜绝的。

互斥量

为了解决线程间的竞争,可以使用互斥量。它是一个锁,当拥有锁的时候才可以进行操作。

互斥量可以通过静态和动态两种方式初始化。

死锁预防

互斥量采用了封锁协议,如果线程无法获取互斥量,那么就会被阻塞,等待互斥量解锁后才能继续操作。当多个实体互相等待时,死锁就会出现。应对方法有死锁预防、死锁规避、死锁检测和恢复等。

预防死锁可以通过条件加锁函数pthread_mutex_trylock()实现。

条件变量

条件变量可以实现线程间协作

标签:总结,并行计算,死锁,线程,pthread,进程,完整性,执行,第四章
From: https://www.cnblogs.com/sjd-sr/p/17792439.html

相关文章

  • 每日总结10.27
    今天通过在虚拟机上配置了Spark,使用SparkAPI编写一个独立应用程序,学习链接https://dblab.xmu.edu.cn/blog/4322/使用Maven对Scala独立应用程序进行编译打包完成了软件构造的作业,将生成的算式习题长期保存下来,采用了CSV形式存储    ......
  • 树剖小总结
    P2680[NOIP2015提高组]运输计划要求经过边的询问的最大值,和不经过边的询问的最大值,直接用线段树维护就行了。然后就是二分做法,比较合理。P4219[BJOI2014]大融合首先考虑暴力做法,随便钦定一个树根,然后维护子树size即可。每次连边,比如x作为y的父亲,那么x及其祖先的siz......
  • XML知识点总结
    1.xml1.1概述【理解】万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者:TimBerners-Lee(蒂姆·伯纳斯·李)。是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远......
  • 代码随想录算法训练营第一天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩
    今日学习的文章链接和视频链接https://programmercarl.com/0977.有序数组的平方.htmlhttps://programmercarl.com/0209.长度最小的子数组.htmlhttps://programmercarl.com/0059.螺旋矩阵II.html977.有序数组的平方菜鸡刚开始只会暴力,记录一下双指针:varsortedSquares=......
  • C++的std::move与std::forward原理总结
    目录0、左值与右值的理解左值和右值的概念左值引用和右值引用1.std::move1.1函数原型1.2参数讨论1.3通用引用1.4返回值1.5std::move的常用例子1.5.1用于vector添加值1.5.2用于unique_ptr传递1.6再说转移对象控制权2.std::foward参考阅读大型的C++开源项目代码,基本......
  • 10月27号总结
    一、什么是JWTJWT(JSONWebToken)是一种用于在网络应用间传递信息的开放标准(RFC7519)。它以JSON格式存储被加密后的信息,通常用于验证和身份认证。这是token验证的一种令牌。叫身份验证令牌。在前后端分离的架构中常用。白话文理解:         在以前用cookie认证时候,会把......
  • # CSP-S 2023 总结
    A密码锁暴力枚举每一个锁可以到达的状态,集合并起来就OK。B消消乐蒙蔽,首先有一个直观的想法就是区间dp,\(dp_{l,r}\)表示区间\([l,r]\)可以消除到什么长度。然后突然意识到可以从每一个字符开头做一遍栈,如果为空就表示可以。思考到这里,脑子就短路了,实际上可以dp,每个点......
  • 每日总结
    今日收获将操作系统的内容看完啦~也解决了之前的遗留问题;写完了软件构造的作业和软件设计作业;明天预计明天要稍稍准备一下普通话,打印准考证;复习那个比赛,周六校内选拔呀~加油呀~~继续复习软考......
  • 2023.10.26——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软件需求分析及C#明日计划:学习......
  • 10.26每日总结
    1、CSV以纯文本形式存储数字和文本数据,以换行符间隔多条记录2、软件实现数据持久性的最基本途径是文件和数据库3、影响应用程序选择数据的存储、管理和处理方式的因素包括共享与传输、数据的持久性和使用频次、数据的量及管理、数据的操作方式4、Java字节流操作的基础类是Out......