什么是线程?
线程是进程内部的执行流。
- 一个进程中的多个线程共享地址空间与其中的部分内存资源(代码段,数据段,堆),但每个线程都有自己独立的栈空间,私有寄存器与线程控制块 (Thread Control Block, TCB)。
OS 以线程作为 CPU 调度与执行的最小单位。
- 什么?不是进程吗?
- sorry,我不想那么早介绍一堆概念。之前的章节所涉及到的进程均为单线程进程 (single-threaded process),所以在 CPU 的调度与执行上与线程等价。
那么进程抽象的意义何在?
OS 以进程作为资源分配的最小单位;进程拥有自己独立的地址空间,资源开销大,稳定性高。
多线程
多线程 (multithreading) 就是在同一进程里同时运行多个线程。
- 并行任务能在代码中更自然的表达
- 线程切换比进程切换更为轻量
- 避免进程阻塞(跑 I/O 的线程阻塞,CPU 切换至同进程中的其他线程继续运行)
多线程本质上是一个进程内部的多道程序设计 (multiprogramming)。
POSIX 线程 API
pthread_create(pthread_t*, pthread_attr_t*, void*, void*):指定函数与参数pthread_exit(void *retval)pthread_join(pthread_t, void**)
同步原语。敬请期待!
pthread_mutex_lock(pthread_mutex_t*),pthread_mutex_unlock(pthread_mutex_t*)pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*),pthread_cond_signal(pthread_cond_t*)
多线程的程序在编译时需要添加 -pthread flag。