现代的操作系统引入多任务的概念,传统上多任务实现是多进程完成的。
支持多任务就涉及到进程的切换,也就意味着进程上下文的切换。
上下文就是运行进程需要的资源,内存缓存pc指针等等。
如果我们进程很多,多进程频繁的切换,每次都做上下文切换还是很耗费资源的。
由于进程虚拟地址空间是私有的,因此进程切换开销比较大。
为了调高系统的性能,Linux引入了轻量级的进程(LWP,light weight process):线程la
线程是一个独立运行的函数,相互通讯比较方便。线程之间是兄弟。
在同一进程中创建线程共享该进程的地址空间,线程和进程参与同一的调度。
进程是资源分配的最小单位
线程是进程调度的最小单位
之前当创建一个进程时候,实际上是创建一个main线程,这个main线程独占地址空间
**************************************************************************/
//资源分配:
/*************************************************************************

一个进程多个线程共享资源 每个线程私有的资源
进程中打开的文件描述符 可执行的指令
静态数据(全局变量,静态变量) PC(程序计数器)和相关寄存器
当前工作目录
可执行的指令 局部变量
  错误号errno

 


ps 命令 -L参数显示进程,并尽量显示器lwp线程id和Nlwp线程个数
  ps ax -L

posix线程标准,需要使用第三方库libpthread.so (sudo find / -name libpthread.so)

安装posix线程标准的man手册章节
  man 3 pthread_create
**************************************************************************/
//函数功能:
/*************************************************************************
  #include <pthread.h>

  int pthread_create(pthread_t *thread,
          const pthread_attr_t *attr,
          void *(*start_routine) (void * arg),
          void *arg);
  功能:创建一个线程
  参数:
    thread     线程id变量取地址

    attr       线程的属性,NULL表示默认值

    start_routine   线程执行的函数
      需要自己定义要给 void *(fun) (void * arg)类型的函数,

      然后把函数名传进去,这个函数就是线程执行的内容

    arg                    传递给线程执行的参数
      可以接收任意类型的指针,最终值传递给了线程函数

  返回值:  
    成功    0
    失败,  errno值


  Compile and link with -pthread

  gcc 01_pthread_create.c -lpthread
  编译时候需要加上链接库
**************************************************************************/

posted on 2020-10-06 21:11  八杯水  阅读(88)  评论(0)    收藏  举报