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里只有一个