多进程与多线程
进程是资源分配的最小单位,线程是CPU调度的最小单位
https://www.cnblogs.com/toria/p/11123130.html
进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。这就
造成进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理器的空转时
间支持多处理器和减少上下文切换开销,也就出现了线程。
线程通常叫做轻量级进程。线程是在共享内存空间中并发执行的多道执行路径,是一个更加接近于
执行体的概念,拥有独立的执行序列,是进程的基本调度单元,每个进程至少都有一个 main 线程。它
与同进程中的其他线程共享进程空间{堆 代码 数据 文件描述符 信号等},只拥有自己的栈空间,
大大减少了上下文切换的开销。
线程和进程在使用上各有优缺点:
线程执行开销小,占用的 CPU 少,线程之间的切换快,但不利于
资源的管理和保护;而进程正相反。从可移植性来讲,多进程的可移植性要好些。
同进程一样,线程也将相关的变量值放在线程控制表内。一个进程可以有多个线程,也就是有多个
线程控制表及堆栈寄存器,但却共享一个用户地址空间。要注意的是,由于线程共享了进程的资源和地
址空间,因此,任何线程对系统资源的操作都会给其他线程带来影响。
=================================================================
Linux 的线程是通过用户级的函数库实现的,一般采用 pthread 线程库实现线程的访问和控制。它用
第 3 方 posix 标准的 pthread,具有良好的可移植性。 编译的时候要在后面加上 –lpthread
创建 退出 等待
多进程 fork() exit() wait()
多线程 pthread_create pthread_exit() pthread_join()