我是靠谱客的博主 友好吐司,最近开发中收集的这篇文章主要介绍并发执行和并行执行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

并发执行:多个进程在使用同一个cpu,每个进程都独占cpu一会,然后让出cpu资源,供其他进程执行
并行执行:多个进程,在同一时刻,每个家进程都有一个cpu进行运算。

程序是如何变成进程的?
涉及到冯诺依曼体系,首先在输入设备执行完成后,OS要让磁盘上一个可执行格式(不是可执行权限)程序运行起来,第一件事就是(load)程序的相关代码以及静态数据(例如以初始化的变量)到内存中(具体的是到自己的虚拟内存地址空间),当代码和静态数据已经装载到内存后,OS还需要为将要运行的程序做一些额外的操作,比如为该进程分配一些内存;创建一些数据结构;初始化与IO相关的一些任务(比如Unix系统中,设置好每个进程都关联的3个文件描述符:stdout、stdin、stderr),等等。
完成相关操作后,会对源码进行一系列操作(C语言中编译,链接等)编程可执行文件,,shell会生成一个子shell进程(fork)。子进程通过execve系统调用启动加载器。加载器删除子进程现有的虚拟存储器段,在可执行文件(ELF)中段头部表的指导下,创建并初始化一组新的代码,数据,栈和堆段。新的栈和堆被初始化为零,通过虚拟地址空间中的页映射到可执行文件的页大小的片,新的代码和数据段被初始化为可执行文件的内容。最后加载器跳转到ctrl.o初执行程序的初始化工作,然后是进入main函数开始应用程序的执行–>程序就是这样变成了进程。在加载器的帮助下,程序跑进了一个进程中,然后开始了自己的进程路。
gdb调试的时候查看汇编指令

disassemble

1:进程在执行的时候,进程会执行切换,切换是操作系统调度的;
2:在被切换出去的时候,该进程当中的程序计数器会保存程序执行的下一条指令,上下文信息会保存寄存器当中的值;
3:再次切换回来的时候,通过程序计数器和上下文信息来恢复之前的场景继续运算。

查看进程所占用文件

ll /proc/[PID]/fd

最后

以上就是友好吐司为你收集整理的并发执行和并行执行的全部内容,希望文章能够帮你解决并发执行和并行执行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部