linux 线程笔记

1.函数接口:
    1.waitpid 
      pid_t waitpid(pid_t pid, int *wstatus, int options);
      功能:
        回收指定的子进程空间
      参数:
        pid:想要回收的进程的PID号
        wstatus:回收子进程结束的状态
        options: 
            0           阻塞回收
            WNOHANG     非阻塞回收
      返回值:
        成功返回回收到的子进程的PID
        失败返回-1 
        没有回收到子进程空间返回0 
    
    注意:
        1.wait可以回收任一子进程空间
        2.waitpid可以回收指定的子进程空间
        3.waitpid可以设定为非阻塞IO回收

2.exec函数族:
    int execl(const char *path, const char *arg, ...
                    /* (char  *) NULL */);
    int execlp(const char *file, const char *arg, ...
                    /* (char  *) NULL */);
    int execle(const char *path, const char *arg, ...
                    /*, (char *) NULL, char * const envp[] */);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
    int execvpe(const char *file, char *const argv[],
                    char *const envp[]);
    功能:
        利用进程空间执行另外一份代码

    l:执行新代码时,参数以列表形式传递
    v:执行新代码时,参数以指针数组形式传递
    p:执行新代码时,代码在系统路径PATH下查找

    fork创建子进程空间
    exec利用子进程空间执行一段新的代码
    fork + exec:可以启动一个新的软件代码

3.线程
    线程是一个轻量级的进程,包括创建、调度和回收的整个过程

4.线程的创建:
    1.线程被创建后,独享栈区,共享进程中的文本段、数据段和堆区

      进程是独享 0 - 4G虚拟内存空间,包括文本段、数据段和系统数据段
      线程是独享 8M 栈区空间,其余进程中文本段、数据段、堆区与其余线程共享

5.线程的调度:
    1.宏观并行,微观串行

6.线程的回收
    1.线程执行结束后,回收线程空间,避免产生僵尸线程

7.线程和进程有哪些区别?
    1.进程是系统资源分配的最小单元
    2.线程是CPU任务调度的最小单元

8.多线程和多进程的对比:
    执行效率:
      1.多线程 > 多进程
        多线程位于一个进程空间内部,调度任务时不需要切换进程空间
        多进程空间是独立的,任务调度时CPU需要在不同的进程空间切换,增大系统的资源开销

    通信效率:
      1.多线程 > 多进程 
        多线程位于同一个进程空间内部,共享文本段、数据段、堆区,全局变量、静态变量、字符串常量、malloc空间都是共享的
        多进程空间独立,没有共享空间,多进程间通信需要依赖第三方的文件才能实现通信

    安全性:
      1.多进程 > 多线程
        多进程空间独立,一个进程异常结束,不会影响其余进程的执行
        多线程共享同一进程空间,一个线程异常结束,会导致进程结束,其余线程均无法执行

    通信复杂度:
      1.多进程 > 多线程 
        多线程操作共享空间会引发资源竞争,需要使用互斥锁来解决资源竞争
        多进程空间独立,没有共享空间,不会引发资源竞争,不需要考虑加锁

9.fork
  pthread_create 
  int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
  功能:
    在进程空间内部创建一个线程
  参数:
    thread:存放线程ID空间的首地址
    attr:线程的属性空间首地址  (默认传NULL)
    start_routine:线程要执行的函数的地址
    arg:对线程函数传递的参数
  返回值:
    成功返回0 
    失败返回非0 
  
  注意:
    1.编译时需要加-lpthread链接线程库
      gcc filename.c -lpthread 

  exit 
  pthread_exit 

  wait 
  pthread_join

  pthread_self

你可能感兴趣的:(linux,笔记,jvm)