Appearance
#TBD/0413
线程的概念
进程的缺陷
进程是程序一次执行的过程,它是资源管理的最小单位。
- 进程只能在一个时刻干一件事,如果同时干两件事或者多件事,进程就无能为力了。
- 程序在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些不依赖于输入的数据,也将无法执行。
线程的优势
允许进程将所占有的资源从主体中剥离出来。
允许某些线程共享一部分进程的资源。
线程就是轻量的进程,它是程序执行的最小单元。
线程的概念
一个程序至少有一个进程,一个进程至少有一个线程。线程肯定是在进程中创建的。
一个进程只有一个主进程(main pthread),就是 main 函数,主线程可以创建多个对等线程(peer thread)。从创建的时间开始,这些线程是并发执行的。(主线程总是第一个执行,对等线的执行顺序不定。)
[!note] tldr
进程好比两个同学分别画圆和方,线程好比一个同学左手画圆右手画方。
生命周期
| 线程 | 进程 | |
|---|---|---|
| 创建 | pid = fork() | pthread_create(xx,execf,xx,xx) |
| 执行 | pid > 0 父进程执行pid==0子进程执行 | thread_exec() |
| 结束 | exit() | pthread_exit();//自杀phtread_cancel();//他杀 |
| 回收 | wait(); // 阻塞回收waitpid();//非阻塞回收 | pthread_join();//阻塞回收pthread_detach()//非阻塞回收 |
共享资源
全局变量,打开的文件描述符,用户 ID
私有资源
线程 ID(tid),系统相关的数据(函数运行环境),局部变量,私有栈
manpage 安装
bash
sudo apt-get install manpages-posix manpages-posix-dev