进程和线程

进程是系统中的一个活动,它由某个命令、shell 程序或另一进程启动。

进程的属性如下:

  • pid
  • pgid
  • uid
  • gid
  • environment
  • cwd
  • 文件描述符
  • signal actions
  • process statistics
  • nice

这些属性在 /usr/include/sys/proc.h 文件中定义。

线程的属性如下:

  • 堆栈 (stack)
  • 调度策略 (scheduling policy)
  • scheduling priority
  • pending signals
  • blocked signals
  • 特定于线程的数据

这些线程属性在 /usr/include/sys/thread.h 文件中定义。

每个进程由一个或多个线程组成。 线程是一个单独的控制序列流。 多个控制线程允许应用程序进行重叠操作,例如读取终端和写文件。

多个控制线程也允许应用程序同时为来自多个用户的请求服务。 线程提供了这些能力,而又没有多进程的额外开销,例如通过 fork() 系统调用创建的多个进程。

AIX 中引入了一个快速的 fork 例程 f_fork()。 该例程对多线程应用程序非常有用,它们将在调用 fork() 子例程之后立刻调用 exec() 子例程。 fork() 子例程运行起来较慢,因为在实际派生及让其子例程运行全部子处理程序来初始化所有锁之前,它要调用 fork 处理程序以获得所有的库锁。 f_fork() 子例程忽略这些处理程序并直接调用 kfork() 系统调用。 Web 服务器是一个可以使用 f_fork() 子例程的很好的应用程序示例。