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

学习笔记6

时间:2023-10-22 16:12:25浏览次数:21  
标签:NULL int 笔记 学习 pthread 进程 多任务处理 include

知识点总结:

多任务处理:

  1. 多任务处理是操作系统的一个关键特性,它允许多个进程并发运行。
  2. 操作系统的多任务处理提供了更好的系统利用率,因为它能够在同一时间内运行多个进程,而不仅仅是一个。
  3. 多任务处理有助于提供更好的响应时间,因为它允许用户交互并同时运行多个应用程序。

进程:

  1. 进程是正在执行的程序的实例。它包括了程序的代码数据寄存器状态和有关该进程的系统资源信息
  2. 每个进程都有一个唯一的进程标识符(PID),用于唯一标识和操作该进程。
  3. 新进程通常通过fork系统调用创建,产生的新进程被称为子进程

多任务处理系统:

  1. 多任务处理系统使用一个调度器来确定在给定时间内哪些进程运行。调度器可以使用不同的调度算法,如时间片轮转优先级调度来决定执行顺序。
  2. 进程可以处于运行态(正在执行)、就绪态(等待执行)、或休眠态(等待某个事件)。
  3. 进程之间的状态转换和调度取决于它们的状态和优先级。

进程同步:

  1. 进程同步是确保多个进程协调工作的关键问题。如果不进行适当的同步,可能会导致数据竞争和其他并发问题。
  2. 互斥锁用于确保只有一个进程可以访问共享资源,从而避免竞争条件。
  3. 信号量是一种同步工具,用于控制并发访问,避免资源争夺问题。它可以用于进程间通信和协调。
  4. 条件变量用于在多个进程之间进行通信和协调。它们可以用于等待某个条件为真时执行操作。

进程终止:

  1. 进程可以正常终止,通常是通过执行完其主要任务或调用exit系统调用来实现的。
  2. 进程也可以由操作系统强制终止,例如在出现错误或资源不足时。
  3. 父进程通常会使用waitwaitpid系统调用等待子进程终止,并获取子进程的退出状态码




当处理多进程或多线程的应用程序时,会面临以下一些常见问题以及相应的解决方案:

  1. 死锁问题:

    • 问题描述: 多个进程或线程相互等待对方释放资源,导致所有进程都无法继续执行。
    • 解决方案: 避免死锁,可采用资源分配顺序策略、超时机制或死锁检测与解除。
  2. 竞争条件(Race Conditions)问题:

    • 问题描述: 多个进程或线程尝试同时访问共享资源,导致不可预测的结果。
    • 解决方案: 使用互斥锁或信号量确保资源的互斥访问,或采用事务处理方式。
  3. 资源泄漏问题:

    • 问题描述: 进程在终止时未释放已分配的资源,如内存、文件描述符,导致系统资源泄漏。
    • 解决方案: 编写良好的代码以确保资源在不再需要时被正确释放,或使用自动资源管理工具。
  4. 进程间通信问题:

    • 问题描述: 进程需要在不同地址空间的情况下进行通信,例如,父子进程或不相关进程之间的通信。
    • 解决方案: 使用进程间通信(IPC)机制,如管道、消息队列、共享内存、套接字等,以安全地进行数据传递。
  5. 进程崩溃问题:

    • 问题描述: 进程崩溃可能导致数据损坏或系统不稳定。
    • 解决方案: 实施进程监控和自动重启机制,以便在进程崩溃时快速恢复。
  6. 资源争夺问题:

    • 问题描述: 多个进程竞争有限的资源,如锁、内存或文件句柄。
    • 解决方案: 实施资源管理策略,以防止资源争夺,或通过限制资源使用来避免资源过度使用。
  7. 性能问题:

    • 问题描述: 系统负载高,响应时间慢,或者进程之间的竞争导致性能下降。
    • 解决方案: 优化代码、使用多线程或进程池,采用更高效的算法,以提高系统性能。

这些问题和解决方案涵盖了多进程和多线程应用程序开发中的关键考虑因素。

实践

多任务处理:

#include <stdio.h>
#include <unistd.h>

int main() {
int pid = fork(); // 创建子进程
if (pid == 0) {
// 子进程代码
printf("Child process is running\n");
} else if (pid > 0) {
// 父进程代码
printf("Parent process is running\n");
} else {
// 创建进程失败
perror("fork");
}
return 0;
}

创建多进程:
#include <stdio.h>
#include <pthread.h>

int shared_variable = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void *increment(void *arg) {
for (int i = 0; i < 100000; i++) {
pthread_mutex_lock(&mutex);
shared_variable++;
pthread_mutex_unlock(&mutex);
}
return NULL;
}

int main() {
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, increment, NULL);
pthread_create(&thread2, NULL, increment, NULL);

pthread_join(thread1, NULL);
pthread_join(thread2, NULL);

printf("Shared variable: %d\n", shared_variable);
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
int pid = fork();
if (pid == 0) {
// 子进程
printf("Child process is running\n");
exit(0); // 正常终止子进程
} else if (pid > 0) {
// 父进程
sleep(2); // 等待2秒
printf("Parent process is running\n");
}
return 0;
}

标签:NULL,int,笔记,学习,pthread,进程,多任务处理,include
From: https://www.cnblogs.com/zsy1748774883/p/17780578.html

相关文章

  • 程序设计语言学习5
    九、上下文无关文法十、中缀后缀表达式 ......
  • 数据库基础学习过程中遇到的一些基础知识
    1、E-R图它是结构化分析过程的工具,用于数据建模,将现实世界中的十五抽象成信息世界里的数据;2、数据库设计包括--概念设计、逻辑设计、物理设计概念设计:用户角度、E-R图;逻辑设计:E-R图转换成关系模式;物理设计:物理存储方法、索引等;3、数据库系统的三级模式概念模式(也叫做模式、......
  • yzy第六周学习笔记
    第六周学习笔记多任务处理在计算机技术中,多任务处理指的是同时执行几个独立的任务。在单处理器(单CPU)系统中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间的执行切换机制称为上......
  • 第七周Linux教材第三章学习笔记——Unix/Linux进程管理
    Unix/Linux进程管理3.1多任务处理在计算机技术中,多任务处理指的是同时执行几个独立的任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间的执行切换机制称为上下文切换,将一个任务的执行环境更改为另......
  • # 学期2023-2024-1 20231401 《计算机基础与程序设计》第四周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第四周作业这个作业的目标自学教材:计算机科学概论第4章,第5章,C语言程序设计第......
  • 2023-2024-1 20211319《计算机基础与程序设计》第四周学习总结
    2023-2024-120211319《计算机基础与程序设计》第周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK04这个作业的目标<写上具体方面>作业正文......
  • springboot+vue学习(2)
    1、ref :为子组件指定一个索引ID,给元素或者组件注册引用信息。refs是一个对象,包含所有的ref组件。<divid="parent"><user-profileref="profile"></user-profile>(子组件)</div>varparent=newVue({el:'#parent'})//访问子组件varchild=parent.$ref......
  • 2023-2024-1 20231320 《计算机基础与程序设计》第四周学习总结
    2023-2024-120231320《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第四周作业)这个作业的目标<自学《计算机基础与......
  • springboot+vue学习
    最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括checkbox表单类型,并且使用Element组件UI时,此时v-model绑定的数据也是动态生成的例如:定义的data的form里面是空对象,需要动态生成里面的keyexportdefault{data(){return{form:{}......
  • # 2023-2024-1 20231322 《计算机基础与程序设计》第四周学习总结
    作业信息|2023-2024-1-计算机基础与程序设计|(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP))||2023-2024-1计算机基础与程序设计第四周作业||这个作业的目标|总结第四周学习过程中的疑问及收获||作业正文|(https://www.cnblogs.com/cjl03/p/17780446.html)|教材学习......