大名鼎鼎的 Linux —— 进程,线程,协程

大名鼎鼎的 Linux —— 进程,线程,协程

前言

Linux 作为当今服务端最流行的操作系统,是每个后端工程师应当熟练使用和理解的。本篇文章会详细讲述 Linux 系统中的一些基础概念:进程、线程,以及后面由各编程语言所实现的协程

进程是什么?

进程是资源分配的最小单位

计算机专业的同学对这句话肯定不陌生,但是应该怎么去理解这句话?

程序是什么?

计算机程序(英语:Computer Program)是指一组指示电子计算机或其他具有消息处理能力设备每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上

上面是维基百科给出的解释,我们能把程序初步理解为一组 CPU指令集合

我们平时使用编程语言写的代码 (C,java,php,go...),也叫程序,本质上就是一堆字符串。只不过人类写的字符串 CPU 理解不了,CPU 能理解的东西不是正常人能写的,因此在我们写的程序和CPU能执行的指令之间,存在一种转换关系

这种转换关系通过 编译器/解释器 来实现

编译器

test.c

#include<stdio.h>

int main()
{
	printf("hello world\n");
	return 0;
}
复制代码

首先这是一个 C语言程序,一个文本文件,位于磁盘的某个角落,CPU 肯定是看不懂的,所以需要做一层转换

gcc test.c -o test

gcc 就是一种编译器,把 C的文本程序转化为 ELF(Executable and Linkable Format)文件,并不是你所认为的二进制文件(binary)

ELF 文件也是一种可执行文件,其中也包含二进制内容,除此之外还有一些其他的信息

gcc 编译后的为 ELF 文件 

image.png

go 编译后的二进制文件

image.png

解释器

解释器是一种直接执行高级语言代码的计算机程序, 而无需将代码编译成机器码

  • 优点: 消除了编译整个程序的负担,程序可以拆分成多个部分来模块化
  • 缺点: 解释器像是一位“中间人”,每次运行程序时都要先将代码转成另一种语言的代码,然后再作运行,因此解释器的程序运行速度比较缓慢

解释器执行代码的策略一般有以下三种:

  • 直接运行高级编程语言的代码(如 shell 内置的解释器 or php 的解释器)
  • 先将代码转换成高效的中间码(如:php opcode),然后马上执行(不输出中间码,如 PHP-FPM 的执行)
  • 由解释器中内置的编译器先将高级语言的代码编译成中间码,然后再执行(输出中间码,相当于两个阶段,如 javac 先把源码编译成字节码,然后用 jvm 执行字节码)

image.png

不懂就问:先有编译器还是先有编程语言?

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值