Linux
文章平均质量分 89
Linux技巧、原理
程序员面试那点事儿
互联网大厂校招、社招面试官,多年互联网大厂工作经验,分享校招、社招面试题、职场相关内容,互相交流经验
展开
-
学习导航
线程如何让复杂的项目并行执行原创 2021-01-06 22:02:31 · 97 阅读 · 0 评论 -
网络请求延迟变大,该怎么办
文章目录网络延迟案例准备案例分析总结除了 DDoS 会带来网络延迟增大外,也有不少其他原因导致的网络延迟,比如网络传输慢,导致延迟;Linux 内核协议栈报文处理慢,导致延迟;应用程序数据处理慢,导致延迟等等。网络延迟提到网络延迟时,你可能轻松想起它的含义——网络数据传输所用的时间。这个时间可能是单向的,指从源地址发送到目的地址的单程时间;也可能是双向的,即从源地址发送到目的地址,然后又从目的地址发回响应,这个往返全程所用的时间。通常,我们更常用的是双向的往返通信延迟,比如 pin原创 2021-03-12 10:01:01 · 2124 阅读 · 0 评论 -
怎么缓解 DDoS 攻击带来的性能下降问题?
文章目录DDoS 简介案例准备案例分析DDoS 到底该怎么防御总结DDoS 简介DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求,来占用过多的目标资源,从而使目标服务无法响应正常请求。DDoS(Distributed Denial of Service) 则是在 DoS 的基础上,采用了分布式架构,利用多台主机同时攻击目标主机。这样,即使目标服务部署了网络防御设备,面对大量网络请求时,还是无力应对。比如,目前已知的最大流量攻击,正是去年 Gith原创 2021-03-12 09:16:00 · 424 阅读 · 0 评论 -
怎么使用 tcpdump 和 Wireshark 分析网络流量?
文章目录案例准备再探 pingtcpdumpWireshark总结ping是一个最常用的测试服务延迟的工具,很多情况下ping 可以帮我们定位出延迟问题,不过有时候, ping 本身也会出现意想不到的问题。这时,就需要我们抓取 ping 命令执行时收发的网络包,然后分析这些网络包,进而找出问题根源。tcpdump 和 Wireshark 就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包。Wireshark 除了可以原创 2021-03-12 08:55:45 · 913 阅读 · 0 评论 -
怎么使用 tcpdump 和 Wireshark 分析网络流量?
文章目录案例准备再探 pingtcpdumpWireshark小结上一节,我们学习了 DNS 性能问题的分析和优化方法。简单回顾一下,DNS 可以提供域名和 IP 地址的映射关系,也是一种常用的全局负载均衡(GSLB)实现方法。通常,需要暴露到公网的服务,都会绑定一个域名,既方便了人们记忆,也避免了后台服务 IP 地址的变更影响到用户。不过要注意,DNS 解析受到各种网络状况的影响,性能可能不稳定。比如公网延迟增大,缓存过期导致要重新去上游服务器请求,或者流量高峰时 DNS 服务器性能不足等,都会导致原创 2021-03-11 08:53:08 · 570 阅读 · 0 评论 -
DNS 解析时快时慢,我该怎么办?
文章目录域名与 DNS 解析案例准备案例分析案例 1:DNS 解析失败案例 2:DNS 解析不稳定总结上一节,我带你一起学习了网络性能的评估方法。简单回顾一下,Linux 网络基于 TCP/IP 协议栈构建,而在协议栈的不同层,我们所关注的网络性能也不尽相同。在应用层,我们关注的是应用程序的并发连接数、每秒请求数、处理延迟、错误数等,可以使用 wrk、JMeter 等工具,模拟用户的负载,得到想要的测试结果。而在传输层,我们关注的是 TCP、UDP 等传输层协议的工作状况,比如 TCP 连接数、 TC原创 2021-03-11 08:41:59 · 8943 阅读 · 0 评论 -
怎么评估系统的网络性能?
文章目录性能指标回顾网络基准测试各协议层的性能测试转发性能TCP/UDP 性能HTTP性能应用负载性能总结I/O 模型的优化,是解决 C10K 问题的最佳良方。Linux 2.6 中引入的 epoll,完美解决了 C10K 的问题,并一直沿用至今。今天的很多高性能网络方案,仍都基于 epoll。从 C10K 到 C100K,我们只需要增加系统的物理资源,就可以满足要求;但从 C100K 到 C1000K ,光增加物理资源就不够了。要对系统的软硬件进行统一优化,从硬件的中断处理,到网络协议栈的文件描述符原创 2021-03-11 08:27:48 · 680 阅读 · 0 评论 -
C10K 和 C1000K
文章目录C10KI/O 模型优化工作模型优化C1000KC10M总结C10K 和 C1000K 的首字母 C 是 Client 的缩写。C10K 就是单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 也就是单机支持处理 100 万个请求(并发连接 100 万)的问题。C10KC10K 问题最早由 Dan Kegel 在 1999 年提出。那时的服务器还只是 32 位系统,运行着 Linux 2.2 版本(后来又升级到了 2.4 和 2.6,而 2.6 才支持 x86_64),只配原创 2021-03-10 10:31:42 · 1113 阅读 · 0 评论 -
Linux 网络性能指标
文章目录性能指标网络配置套接字信息协议栈统计信息网络吞吐和 PPS连通性和延时性能指标通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能。带宽:表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。吞吐量:表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。延时:表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可原创 2021-03-10 09:45:45 · 772 阅读 · 0 评论 -
Linux 网络详解
文章目录网络模型Linux 网络栈Linux 网络收发流程网络包的接收流程网络包的发送流程小结网络是一种把不同计算机或网络设备连接到一起的技术,它本质上是一种进程间通信方式,特别是跨系统的进程间通信,必须要通过网络才能进行。随着高并发、分布式、云计算、微服务等技术的普及,网络的性能也变得越来越重要。网络模型为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,OSI 模型把网络互联的框架分为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层等七层,每个层负责不同的功能。其中,原创 2021-03-10 08:36:46 · 2852 阅读 · 0 评论 -
阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
文章目录问题 1:阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系问题 2:“文件系统”课后思考问题 3:“磁盘 I/O 延迟”课后思考问题 4:“MySQL 案例”课后思考问题 1:阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系在文件系统的工作原理篇中,我曾经介绍了阻塞、非阻塞 I/O 以及同步、异步 I/O 的含义,这里我们再简单回顾一下。首先我们来看阻塞和非阻塞 I/O。根据应用程序是否阻塞自身运行,可以把 I/O 分为阻塞 I/O 和非阻塞 I/O。所谓阻塞 I/O,是指原创 2021-03-09 09:03:40 · 427 阅读 · 0 评论 -
套路篇:磁盘 I/O 性能优化的几个思路
文章目录I/O 基准测试I/O 性能优化应用程序优化文件系统优化磁盘优化上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路。虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析思路,其实并不难。找出了 I/O 的性能瓶颈后,下一步要做的就是优化了,也就是如何以最快的速度完成 I/O 操作原创 2021-03-09 08:55:52 · 972 阅读 · 0 评论 -
套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
文章目录性能指标文件系统 I/O 性能指标磁盘 I/O 性能指标性能工具性能指标和工具的联系如何迅速分析 I/O 的性能瓶颈总结性能指标老规矩,我们先来回顾一下,描述 I/O 的性能指标有哪些?你可以先回想一下文件系统和磁盘 I/O 的原理,结合下面这张 Linux 系统的 I/O 栈图,凭着记忆和理解自己写一写。或者,你也可以打开前面的文章,挨个复习总结一下。学了这么久的 I/O 性能知识,一说起 I/O 指标,你应该首先会想到分类描述。我们要区分开文件系统和磁盘,分别用不同指标来描述它们的性能。原创 2021-03-09 08:44:19 · 460 阅读 · 0 评论 -
Redis响应严重延迟,如何解决
文章目录案例准备案例分析利用 Redis 作为缓存的案例。这同样是一个基于 Python Flask 的应用程序,它提供了一个 查询缓存的接口,但接口的响应时间比较长,并不能满足线上系统的要求。案例准备本次案例还是基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:机器配置:2 CPU,8GB 内存预先安装 docker、sysstat 、git、make 等工具,如 apt install docker.io sysstat今天的案例由 Pytho原创 2021-03-09 08:32:21 · 1715 阅读 · 1 评论 -
一个SQL查询要15s,这是怎么回事
文章目录案例准备案例分析案例思考总结数据库的案例:这是一个基于 Python Flask 的商品搜索应用,商品信息存在 MySQL 中。这个应用可以通过 MySQL 接口,根据客户端提供的商品名称,去数据库表中查询商品信息。案例准备本次案例还是基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:机器配置:2 CPU,8GB 内存预先安装 docker、sysstat 、git、make 等工具,如 apt install docker.io syssta原创 2021-03-08 09:02:10 · 941 阅读 · 0 评论 -
为什么磁盘的IO延迟很高
文章目录案例准备案例分析总结案例准备本次案例还是基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。我使用的案例环境如下所示:机器配置:2 CPU,8GB 内存预先安装 docker、sysstat 等工具,如 apt install docker.io sysstat为了方便你运行今天的案例,我把它打包成了一个 Docker 镜像。这样,你就只需要运行 Docker 命令就可以启动它。今天的案例需要两台虚拟机,其中一台是案例分析的目标机器,运行 Flask 应用,它的 IP 地原创 2021-03-05 08:52:59 · 4571 阅读 · 1 评论 -
如何找出狂打日志的内鬼
文章目录基本概念解决思路基本概念文件系统、通用块层以及设备层,构成了 Linux 的存储 I/O 栈。文件系统:是对存储设备上的文件进行组织管理的一种机制。为了支持各类不同的文件系统,Linux 在各种文件系统上,抽象了一层虚拟文件系统 VFS它定义了一组所有文件系统都支持的数据结构和标准接口。这样,应用程序和内核中的其他子系统,就只需要跟 VFS 提供的统一接口进行交互。在文件系统的下层,为了支持各种不同类型的存储设备,Linux 又在各种存储设备的基础上,抽象了一个通用块层。原创 2021-03-04 09:51:43 · 192 阅读 · 1 评论 -
Linux 磁盘 I/O是怎么工作的
文章目录磁盘介质分类随机 I/O 都要比连续 I/O读写单位接口分类使用分类通用块层I/O 栈总结磁盘磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。介质分类机械磁盘也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁盘主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中。在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据。显然,如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能。原创 2021-02-24 08:36:46 · 241 阅读 · 0 评论 -
Linux文件系统是怎么工作的
文章目录索引节点和目录项虚拟文件系统文件系统 I/O性能观测容量缓存文件系统和磁盘的 I/O 性能,磁盘为系统提供了最基本的持久化存储。文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。今天,我就带你先来看看,Linux 文件系统的工作原理索引节点和目录项文件系统,本身是对存储设备上的文件,进行组织管理的机制。组织方式不同,就会形成不同的文件系统。在 Linux 中一切皆文件,不仅普通的文件和目录,就连块设备、套接字、管道等,也都要通过统一的文件系统来管理。为了方便管理,Linux原创 2021-02-24 08:25:07 · 208 阅读 · 0 评论 -
文件系统:项目成果要归档,就需要使用档案库
文章目录文件系统的功能规划文件系统的相关命令行文件系统的相关系统调用总结文件系统的功能规划最常用的外部存储是硬盘,数据是以文件的形式保存在硬盘上的。为了管理这些文件,我们在规划文件系统的时候,需要考虑到以下几点。第一点,文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。这就像图书馆里,我们会给设置一排排书架,然后再把书架分成一个个小格子,有的项目存放的资料非常多,一个格子放不下,就需要多个格子来进行存放。我们把这个区域称为存放原始资料的仓库区。第二点,文件系统中也要有索引区,用来方便查原创 2021-02-23 09:38:03 · 352 阅读 · 0 评论 -
如何快速找到系统内存问题
文章目录内存性能指标系统内存指标进程内存指标SWAP指标内存性能工具性能指标和工具的联系如何迅速分析内存的性能瓶颈总结内存性能指标内存性能指标包含系统内存使用情况和进程内存使用情况系统内存指标已用内存和剩余内存:就是已经使用和还未使用的内存。共享内存:通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊的缓存。可用内存:新进程可以使用的最大内存,它包括剩余内存和可回收缓存。缓存包括两部分:一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据原创 2021-02-23 08:45:12 · 172 阅读 · 0 评论 -
系统Swap为什么变高了
文章目录Swap原理NUMA与Swapswappiness总结内存回收,也就是系统释放掉可以回收的内存,比如缓存和和缓冲区,在内容管理中,叫做文件页。大部分文件页可以直接回收,有需要再从磁盘读取就可以了被应用修改过,暂时还没有写回磁盘的数据(脏页),需要些写入磁盘,才能内存释放,脏页的写入有两种方式可以在应用程序中,通过系统调用fsync,把脏页同步到磁盘中可以交给系统,由内核线程pbflush负责这些脏页的刷新通过内存映射获取的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次原创 2021-02-10 09:38:54 · 261 阅读 · 0 评论 -
如何利用系统缓存优化程序的运行效率
Buffer和Cache的设计目的是为了提升系统的IO性能,利用内存,充当起磁盘和快速CPU之间的桥梁,加快IO的访问速度。Buffer和Cache分别缓存的是对磁盘和文件系统的读写数据从写的角度来看,不仅可以优化磁盘和文件的写入,对应用程序也有好处,应用程序可以在数据真正落盘前,就返回去做其他工作从读的角度来看,不仅可以提高哪些频繁访问数据的读取速度,也降低了IO对磁盘的压力如何利用Buffer和Cache来优化IO性能,提高程序的运行效率呢?缓存命中率直接通过缓存获取数据的请求次数占所有原创 2021-02-08 09:14:17 · 537 阅读 · 0 评论 -
用户态内存映射:如何找到正确的会议室
文章目录mmap的原理用户态缺页异常总结mmap的原理用户态缺页异常总结用户态内存映射函数mmap,包括用它来做匿名映射和文件映射用户态的页表结构,存储位置在mm_struct中用户态访问没有映射的内存会引发缺页异常,分配物理页面、补齐页表。如果是匿名映射则分配物理内存;如果是swap ,则将swap文件读入;如果是文件映射,则将文件读入。...原创 2021-01-16 11:02:26 · 145 阅读 · 0 评论 -
物理内存管理 下
文章目录总结总结物理内存分NUMA节点,分别进行管理每个NUMA节点分成多个内存区域每个内存区域分成多个物理页面伙伴系统将多个连续的页面作为一个大的内存块分配给上层kswapd负责物理页面的换入换出Slub Allocator将从伙伴系统申请的大内存切成小块,分配给其他系统...原创 2021-01-16 10:54:42 · 149 阅读 · 0 评论 -
进程空间管理:项目组还可以自行布置会议室
文章目录用户态和内核态的划分用户态布局进程的虚拟空间是如何管理的,32位操作和64位操作系统的内存布局相似,但是有些地方差别比较大。用户态和内核态的划分进程的虚拟地址空间,就是站在项目组的角度来看内存,task_struct里有一个struct mm_struct结构来管理内存struct mm_struct *mm;整个虚拟内存空间要一分为二,一部分是用户态地址空间,一部分是内核态地址空间,这两部分通过mm_struct中task_size来定义虚拟空间和内核空间的分界线unsigned原创 2021-01-11 08:46:09 · 138 阅读 · 0 评论 -
内存管理之项目组独享会议室封闭开发
文章目录分段机制的原理我们说了虚拟空间内存的布局,如何将其映射为物理地址呢?x86 CPU使用分段机制,规划虚拟空间的时候,也是将空间分成多个段进行保存。分段机制的原理分段机制下虚拟地址由两部分组成:段选择子和段内偏移量。段选择子保存在段寄存器里,段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限、特权等级等。虚拟地址的段内偏移量应该位于0和段界限之内。如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。例如:将上面的虚拟空间分为4个原创 2021-01-10 17:25:44 · 163 阅读 · 0 评论 -
内存管理之规划进程内存空间布局
文章目录独享内存空间的原理总结计算机的计算指的是两方面内容:进程和线程对于CPU的使用对于内存的管理我们把内存管理比喻为一个项目组的封闭开发的会议室,每个进程都应该有自己的内存空间,内存空间都是独立的,相互隔离的,对于每个进程来讲,看起来都是独占的。独享内存空间的原理总结虚拟内存的管理,每个进程看到的是独立的、互不干扰的虚拟地址空间物理内存的管理,物理内存地址只有内存管理模块能够使用内存映射,需要将虚拟内核和物理内存映射、关联起来。...原创 2021-01-10 16:10:31 · 228 阅读 · 0 评论 -
线程的创建:如何执行一个新子项目
文章目录用户态创建线程内核态创建任务第一个上面复杂的标志位设定。第二个就是对于亲缘关系的影响,毕竟我们要识别多个线程是不是属于一个进程。第三,对于信号的处理用户态执行线程总结创建一个线程用的是pthread_create用户态创建线程线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。pthread_create不是一个系统调用,是Glibc库的一个函数,所以需要去Glibc里找线索。在nptl/pthread_create.c 里面找到了这个函数,int __pthread_cr原创 2021-01-09 20:18:40 · 145 阅读 · 0 评论 -
ELF和静态链接
文章目录拆解程序执行拆解程序执行C语言-汇编语言-机器码 这个过程在计算机上是由两部分组成:第一部分:编译、汇编、链接之后,形成一个可执行文件。第二部分:通过装载器把可执行文件装载到内存,CPU从内存中读取指令和数据,开始真正执行程序。例如:// add_lib.cint add(int a, int b){ return a+b;}// link_example.c #include <stdio.h>int main(){ int a = 1原创 2021-01-09 19:15:19 · 162 阅读 · 0 评论 -
进程数据结构:项目多了就需要项目管理系统
文章目录用户态函数栈内核态函数栈通过task_struct找内核栈通过内核找task_struct总结程序在执行过程中,一旦调用到系统调用,就需要进入内核,那如何将用户态的执行和内核态的执行串起来呢?需要以下两个重要的成员变量struct thread_info thread_info;void *stack;用户态函数栈用户态中,程序的执行往往是一个函数调用另外一个函数,函数调用是通过栈来进行的。函数调用也很简单,本质就是指令跳转,从一个代码的地方跳到另外一个地方,比较难搞的问题是,参原创 2021-01-09 19:15:09 · 129 阅读 · 0 评论 -
调度之如何制定项目管理流程
文章目录调度策略与调度类实时调度策略普通调度策略完全公平调度算法调度队列与调度实体调度类是如何工作的总结task_struct仅仅能够解决看到的问题,但是还需要解决如何制定流程,进行项目调度的问题。对于操作系统来说,它面对的CPU数量是有限的,干活的都是他们,但是进程数目远远超过CPU的数目,因此就需要进程的调度,有效的分配CPU的时间,既要保证进程的最快响应,也要保证进程之间的公平。调度策略与调度类Linux里面,进程大概分为两种。实时进程:需要尽快执行返回结果的那种。普通进程:大部分进程都原创 2021-01-09 19:14:59 · 369 阅读 · 0 评论 -
进程的创建:如何发起一个新项目
文章目录fork的第一件大事:复制结构fork的第二件大事:唤醒新进程总结fork是一个系统调用,根据系统调用的流程,最后在sys_call_table中找到相应的系统调用sys_fork。根据SYSCALL_DEFINE0这个宏的定义,下面代码代表了sys_forkSYSCALL_DEFINE0(fork){...... return _do_fork(SIGCHLD, 0, 0, NULL, NULL, 0);}sys_fork会调用_do_fork。long _do_fork(un原创 2021-01-09 19:13:24 · 157 阅读 · 0 评论 -
抢占式调度
所有的进程调用最终都会走__schedule函数,我们叫进程调度第一定律。抢占式调度什么时候会发生抢占式调度呢?执行时间一个进程执行时间太长了,是时候切换另一个进程了。如何衡量一个进程的运行时间呢计算机里有个时钟,会过一段时间就触发一次时钟中断,通知操作系统,时间又过去了一个周期,这个是个很好的可以查看是否需要抢占的时间点的方式。时钟中断处理函数会调用scheduler_tick,代码如下void scheduler_tick(void){ int cpu = smp_processor原创 2021-01-09 15:29:17 · 4106 阅读 · 0 评论 -
主动调度是如何发生的
文章目录主动调度进程上下文切换指令指针的保存于恢复总结进程调度其实就是一个人在做A项目,在某个时刻,换成B去了,发生这种情况有两种方式方式一:A项目做着做着,发现里面有一条指令sleep,也就是要休息一下,或者在等待某个IO时间,主动让出了CPU,然后可以开始做B项目。方式二:A项目做着做着,旷日持久,实在受不了了,项目经历介入了,暂停项目A,B项目也要做一下,要不然B项目该投诉了。主动调度先看下方式一的主动调度。几个场景如下写入块设备的一个典型场景。写入需要一段时间,这段时间用不上CP原创 2021-01-09 10:03:22 · 180 阅读 · 0 评论 -
进程数据结构:项目多了就需要项目管理系统
Linux内核的任务管理是非常复杂的运行统计信息进程运行过程中,会有一些统计量,包含进程在用户态和内核态消耗的时间、上下切换的次数等。u64 utime;// 用户态消耗的 CPU 时间u64 stime;// 内核态消耗的 CPU 时间unsigned long nvcsw;// 自愿 (voluntary) 上下文切换计数unsigned long nivcsw;// 非自愿 (involuntary) 上下文切换计数u64 start_time;// 进程启动时间,不包原创 2021-01-07 23:18:08 · 184 阅读 · 0 评论 -
进程的数据结构
文章目录任务任务ID任务展示任务下发指令信号处理任务状态总结任务进程有一个或多个线程,他们都需要内核分配CPU来干活。在Linux里,无论是进程还是线程,在内核里,统一都叫任务,由一个统一的结构task_struct进行管理。所有执行的项目应该有个项目列表,所以Linux内核有一个链表,将所有的task_struct串起来。struct list_head tasks;任务ID每个任务都应该有一个唯一ID作为任务标识。task_struct里设计的任务IDpid_t pid; // p原创 2021-01-07 09:10:49 · 844 阅读 · 0 评论 -
线程如何让复杂的项目并行执行
文章目录为什么要有线程如何创建线程线程的数据数据的保护Mutex总结时刻为什么要有线程对于任何一个进程,默认有一个主线程,线程是负责执行二进制指令的,根据项目执行计划书,一行行的执行下去。进程比线程负责的多,除了执行指令之外,内存、文件系统都需要它来管理。进程相当于一个项目,而线程就是为了完成项目需求,而建立的一个一个开发任务。如果一个任务是可以拆解的,前后相关性没有很大关联,就可以并行执行。比如有个开发任务,要开发200个页面,可以拆分成10个任务,每个任务负责10个页面,并行开发,完成之原创 2021-01-06 08:58:56 · 444 阅读 · 0 评论 -
进程的创建、运行及进程树
文章目录写代码:用系统调用创建进程进行编译:程序的二进制格式有了系统调用,就可以创建进程了。写代码:用系统调用创建进程process.c代码如下#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h> extern int create_process (char* program, char** arg_list); int cr原创 2021-01-04 08:58:18 · 2352 阅读 · 0 评论 -
Linux之系统调用
文章目录glibc对系统调用的封装32位系统调用过程64位调用过程系统调用表总结glibc对系统调用的封装Linux提供了glibc这个中介,它更熟悉系统调用的细节,并且可以封装成更加友好的接口。通过最常用的系统调用open为例,看看系统调用是如何实现的。用户态进程里调用open函数如下:大部分用户会选择glibc里面的open函数,定义如下int open(const char *pathname, int flags, mode_t mode)glibc源代码中,有个文件syscalls原创 2021-01-03 15:23:30 · 358 阅读 · 0 评论