Concurrency
并发编程
- 进程: 独立虚拟地址空间
- i/o多路复用: 一个进程的上下文显示调度他们自己的逻辑流
- 线程:运行在单一进程上下文的逻辑流,由内核控制
进程
- fork, exec, waitpid
- 共享文件表,不共享用户地址空间,共享状态信息变得困难
I/O多路复用
使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后才将控制返回给应用程序。
用作event-driven程序的基础。
客户端池:
- 优点:不需要切换上下文
- 缺点:编码复杂
thread
有自己的thread id, stack, PC, registers
共享进程的整个虚拟地址空间。
线程之间对等,无父子关系,切换上下文快。
pthread api
-
pthread_create
-
pthread_exit
-
pthread_join :回收,阻塞,直到tid终止
-
pthread_detach: 不被其他回收,在终止时被系统回收
-
共享变量
- 全局变量:任何线程都可以访问
- 本地自动变量:无static,只在自己的thread里
- 本地静态:线程共享,在vm里只有一个