- 前言
- 程序
- 多进程和多线程的作用
- 总结
前言
接触编程时,通常会将一些概念混淆。程序,进程,线程是什么?一个程序为什么按我们编写的代码逻辑执行?源文件,中间文件,可执行文件,动态库,静态库又是什么关系?编译链接又是在做什么?多进程和多线程存在的意义,内存分配又是怎样的?等。
本文针对以上问题做简要小结。
程序
程序:实际上是中间文件链接后的集合
可执行文件+链接动态库 = 程序(总的可执行文件)
库为什么存在?
答:为了链接的方便。因为一个大的工程往往源文件众多,由此生成的中间文件太多,一个个链接麻烦,所以给一些中间文件打了个包,生成库。
静态库(linux下:.a,windows下:.lib):中间文件的集合,并已嵌入到可执行文件中
动态库(linux下:.so,windows下:.dll):中间文件的集合,没有嵌入到可执行文件中,所以用的时候得链接
编译流程
编译:源文件 => 中间文件
预处理 -E:头文件展开,宏替换,条件编译,去注释
编译 -s:检查语法后,c代码 => 汇编代码
汇编 -c:汇编代码 => 机器码,生成.o中间文件
链接:链接中间文件 => 可执行文件
程序是可独立运行的
生成可执行文件后,便不再依赖源文件和中间目标文件就可以运行
因动态库未嵌入到可执行文件中,所以一个程序除了可执行文件,往往会包含众多动态库文件。如:windows环境下,去查看一个程序的文件,往往会看到多个.exe可执行文件(对应多进程)和多个.dll动态库文件;linux环境下,多个可执行文件+多个.so动态库文件。
QQ程序:
进程 = 跑起来的程序
程序的代码将存入内存的代码段中。将不在依赖原来的可执行文件,即此时把这个可执行文件删了,也不会影响此时的进程。
多进程和多线程的作用
多进程
一个程序启动多个进程。一个程序启动起来本应该是一个进程,但它可作为父进程启动多个子进程。
因进程是资源分配的最小单位,故一个子进程往往运行着一个新的程序。那么这一个程序启动起来后,又会启动多个新程序,就可以同时完成多个程序的功能。
多线程
每一个进程,都有一个主线程,主线程可以启动多个子线程。
因线程是程序执行的最小单位,故每一个线程对应一个执行流/工作流,如多线程用来处理高迸发的客户端请求
总结
本文是对程序、编译、多进程和多线程的个人理解,欢迎指正。



